From a24a57651240c832a07bea1c50f6d32555af159f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 Jan 2024 06:33:22 +0000 Subject: [PATCH] Rebuild pages at 1c709e73e74040095fe1e773c51505cf9e82d485 --- Apzure_ip_master/authorship.json | 2 +- Apzure_ip_master/commits.json | 2 +- Bandov_ip_master/authorship.json | 2 +- Bandov_ip_master/commits.json | 2 +- ChrysanthemumT_ip_master/authorship.json | 2 +- ChrysanthemumT_ip_master/commits.json | 2 +- ChuaZiLong_ip_master/authorship.json | 2 +- ChuaZiLong_ip_master/commits.json | 2 +- Darylgolden_ip_master/commits.json | 2 +- Ella-e_ip_master/authorship.json | 2 +- Ella-e_ip_master/commits.json | 2 +- HusseinSafwan02_ip_master/authorship.json | 2 +- HusseinSafwan02_ip_master/commits.json | 2 +- KinTatHo_ip_master/authorship.json | 2 +- KinTatHo_ip_master/commits.json | 2 +- LWS49_ip_master/authorship.json | 2 +- LWS49_ip_master/commits.json | 2 +- Ragnapop_ip_master/authorship.json | 2 +- Ragnapop_ip_master/commits.json | 2 +- Tanzhiheng26_ip_master/authorship.json | 2 +- Tanzhiheng26_ip_master/commits.json | 2 +- Yskie_ip_master/authorship.json | 2 +- Yskie_ip_master/commits.json | 2 +- alfaloo_ip_master/authorship.json | 2 +- alfaloo_ip_master/commits.json | 2 +- appleraincoat_ip_master/authorship.json | 2 +- appleraincoat_ip_master/commits.json | 2 +- archive.zip | Bin 2891509 -> 2945756 bytes bertrandong_ip_master/authorship.json | 2 +- bertrandong_ip_master/commits.json | 2 +- biinnnggggg_ip_master/authorship.json | 2 +- biinnnggggg_ip_master/commits.json | 2 +- cheahTJ_ip_master/authorship.json | 2 +- cheahTJ_ip_master/commits.json | 2 +- cyqjoseph_ip_master/authorship.json | 2 +- cyqjoseph_ip_master/commits.json | 2 +- darryl-chan_ip_master/authorship.json | 2 +- darryl-chan_ip_master/commits.json | 2 +- dedsecrattle_ip_master/authorship.json | 2 +- dedsecrattle_ip_master/commits.json | 2 +- fy17ohhh_ip_master/authorship.json | 2 +- fy17ohhh_ip_master/commits.json | 2 +- garywongkai_ip_master/authorship.json | 2 +- garywongkai_ip_master/commits.json | 2 +- gerteck_ip_master/authorship.json | 2 +- gerteck_ip_master/commits.json | 2 +- hjuntan_ip_master/authorship.json | 2 +- hjuntan_ip_master/commits.json | 2 +- irwynliong_ip_master/authorship.json | 2 +- irwynliong_ip_master/commits.json | 2 +- jinhanfromNUS_ip_master/commits.json | 2 +- mahadhir247_ip_master/authorship.json | 2 +- mahadhir247_ip_master/commits.json | 2 +- marcus-ny_ip_master/authorship.json | 2 +- marcus-ny_ip_master/commits.json | 2 +- pjanthony2001_ip_master/authorship.json | 2 +- pjanthony2001_ip_master/commits.json | 2 +- reetmitra_ip_master/authorship.json | 2 +- reetmitra_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 13124 ++++++++++---------- summary.json | 2 +- taeewonnn_ip_master/authorship.json | 2 +- taeewonnn_ip_master/commits.json | 2 +- taniatsq_ip_master/authorship.json | 2 +- taniatsq_ip_master/commits.json | 2 +- vnnamng_ip_master/authorship.json | 2 +- vnnamng_ip_master/commits.json | 2 +- yadunut_ip_master/authorship.json | 2 +- yadunut_ip_master/commits.json | 2 +- yashma-sonara_ip_master/authorship.json | 2 +- yashma-sonara_ip_master/commits.json | 2 +- ziyi22_ip_master/authorship.json | 2 +- ziyi22_ip_master/commits.json | 2 +- 73 files changed, 6633 insertions(+), 6633 deletions(-) diff --git a/Apzure_ip_master/authorship.json b/Apzure_ip_master/authorship.json index 88c02c53..98462a78 100644 --- a/Apzure_ip_master/authorship.json +++ b/Apzure_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/ArgumentNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class ArgumentNotFoundException extends DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" public ArgumentNotFoundException(String command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" super(\"Arguments are required for \" + command);","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":7}},{"path":"src/main/java/Bird.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class Bird {","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" public static void main(String[] args) { ","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" greet();","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" TaskList.create();","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" Storage.init();","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" CommandHandler.scan();","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" public static void greet() {","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" System.out.println(\" /\\\\_/\\\\\");","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" System.out.println(\"((@v@))\");","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" System.out.println(\"():::()\");","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" System.out.println(\" VV-VV\");","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" public static void goodbye() {","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Apzure":24}},{"path":"src/main/java/CommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"public class CommandHandler {","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" public enum Command {","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" BYE,","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" LIST,","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" MARK,","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" UNMARK,","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" DELETE,","lastModifiedDate":"2024-01-26"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" TODO,","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" DEADLINE,","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" EVENT","lastModifiedDate":"2024-01-26"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" public static void scan() {","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" boolean exitScan \u003d false;","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" while (!exitScan) {","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" exitScan \u003d executeCommand(userInput);","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" scanner.close();","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":" private static boolean executeCommand(String userInput) throws DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":32,"author":{"gitId":"Apzure"},"content":" String[] words \u003d userInput.split(\"\\\\s+\");","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Apzure"},"content":" Command command \u003d null;","lastModifiedDate":"2024-01-28"},{"lineNumber":34,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":35,"author":{"gitId":"Apzure"},"content":" command \u003d Command.valueOf(words[0].toUpperCase()); ","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"Apzure"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"Apzure"},"content":" String commandStr \u003d words[0];","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"Apzure"},"content":" throw new CommandNotFoundException(commandStr);","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":40,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Apzure"},"content":" switch (command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Apzure"},"content":" case BYE:","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"Apzure"},"content":" Bird.goodbye();","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Apzure"},"content":" return true;","lastModifiedDate":"2024-01-26"},{"lineNumber":45,"author":{"gitId":"Apzure"},"content":" case LIST:","lastModifiedDate":"2024-01-26"},{"lineNumber":46,"author":{"gitId":"Apzure"},"content":" TaskList.list();","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Apzure"},"content":" default:","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Apzure"},"content":" // The logic below is for commands with arguments","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Apzure"},"content":" String arguments \u003d \"\";","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Apzure"},"content":" arguments \u003d userInput.substring(command.name().length() + 1);","lastModifiedDate":"2024-01-26"},{"lineNumber":53,"author":{"gitId":"Apzure"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":54,"author":{"gitId":"Apzure"},"content":" throw new ArgumentNotFoundException(command.name());","lastModifiedDate":"2024-01-26"},{"lineNumber":55,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Apzure"},"content":" switch (command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Apzure"},"content":" case MARK:","lastModifiedDate":"2024-01-26"},{"lineNumber":58,"author":{"gitId":"Apzure"},"content":" TaskList.markTask(processTaskIdx(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Apzure"},"content":" case UNMARK:","lastModifiedDate":"2024-01-26"},{"lineNumber":61,"author":{"gitId":"Apzure"},"content":" TaskList.unmarkTask(processTaskIdx(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Apzure"},"content":" case DELETE:","lastModifiedDate":"2024-01-26"},{"lineNumber":64,"author":{"gitId":"Apzure"},"content":" TaskList.deleteTask(processTaskIdx(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Apzure"},"content":" case TODO:","lastModifiedDate":"2024-01-26"},{"lineNumber":67,"author":{"gitId":"Apzure"},"content":" TaskList.addTask(processToDo(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"Apzure"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-26"},{"lineNumber":70,"author":{"gitId":"Apzure"},"content":" TaskList.addTask(processDeadline(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Apzure"},"content":" case EVENT:","lastModifiedDate":"2024-01-26"},{"lineNumber":73,"author":{"gitId":"Apzure"},"content":" TaskList.addTask(processEvent(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Apzure"},"content":" default:","lastModifiedDate":"2024-01-26"},{"lineNumber":76,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Error: CommandSet Hashtable contains a command that is not implemented in the switch statement!\");","lastModifiedDate":"2024-01-26"},{"lineNumber":77,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-26"},{"lineNumber":78,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Apzure"},"content":" // To store the updated Task List","lastModifiedDate":"2024-01-28"},{"lineNumber":80,"author":{"gitId":"Apzure"},"content":" Storage.store();","lastModifiedDate":"2024-01-28"},{"lineNumber":81,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Apzure"},"content":" return false;","lastModifiedDate":"2024-01-26"},{"lineNumber":83,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-26"},{"lineNumber":85,"author":{"gitId":"Apzure"},"content":" private static int processTaskIdx(String arguments) throws IndexOutOfRange{","lastModifiedDate":"2024-01-26"},{"lineNumber":86,"author":{"gitId":"Apzure"},"content":" int idx \u003d Integer.parseInt(arguments);","lastModifiedDate":"2024-01-26"},{"lineNumber":87,"author":{"gitId":"Apzure"},"content":" int size \u003d TaskList.listSize();","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Apzure"},"content":" if (idx \u003c\u003d 0 || idx \u003e size) {","lastModifiedDate":"2024-01-26"},{"lineNumber":89,"author":{"gitId":"Apzure"},"content":" throw new IndexOutOfRange(idx, size);","lastModifiedDate":"2024-01-26"},{"lineNumber":90,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":91,"author":{"gitId":"Apzure"},"content":" return idx;","lastModifiedDate":"2024-01-26"},{"lineNumber":92,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":93,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":94,"author":{"gitId":"Apzure"},"content":" private static ToDo processToDo(String arguments) {","lastModifiedDate":"2024-01-25"},{"lineNumber":95,"author":{"gitId":"Apzure"},"content":" return new ToDo(arguments);","lastModifiedDate":"2024-01-25"},{"lineNumber":96,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":97,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":98,"author":{"gitId":"Apzure"},"content":" private static Deadline processDeadline(String arguments) throws InvalidDeadlineFormatException, InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":99,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":100,"author":{"gitId":"Apzure"},"content":" String[] parts \u003d arguments.split(\"/by \");","lastModifiedDate":"2024-01-25"},{"lineNumber":101,"author":{"gitId":"Apzure"},"content":" return new Deadline(parts[0], parts[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":102,"author":{"gitId":"Apzure"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":103,"author":{"gitId":"Apzure"},"content":" throw new InvalidDeadlineFormatException();","lastModifiedDate":"2024-01-26"},{"lineNumber":104,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":105,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":106,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":107,"author":{"gitId":"Apzure"},"content":" private static Event processEvent(String arguments) throws InvalidEventFormatException, InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":108,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":109,"author":{"gitId":"Apzure"},"content":" String[] parts \u003d arguments.split(\"/from \");","lastModifiedDate":"2024-01-25"},{"lineNumber":110,"author":{"gitId":"Apzure"},"content":" String[] parts2 \u003d parts[1].split(\"/to \");","lastModifiedDate":"2024-01-25"},{"lineNumber":111,"author":{"gitId":"Apzure"},"content":" return new Event(parts[0], parts2[0], parts2[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":112,"author":{"gitId":"Apzure"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":113,"author":{"gitId":"Apzure"},"content":" throw new InvalidEventFormatException();","lastModifiedDate":"2024-01-26"},{"lineNumber":114,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":115,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":116,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"},{"lineNumber":117,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":117}},{"path":"src/main/java/CommandNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class CommandNotFoundException extends DukeException{","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public CommandNotFoundException(String command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(command + \" is not a valid command!\");","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" private LocalDate date;","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" static final DateTimeFormatter f \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" public Deadline(String name, String date) throws InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" this.date \u003d LocalDate.parse(date);","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" throw new InvalidDateFormat();","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" String date \u003d String.format(\" (by: %s)\", this.date.format(f));","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" return \"[D]\" + super.toString() + date;","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":23}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public DukeException(String eString) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(\"Exception: \" + eString);","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" LocalDate from;","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" LocalDate to;","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" static final DateTimeFormatter f \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" public Event(String name, String from, String to) throws InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" super(name.trim());","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" this.from \u003d LocalDate.parse(from.trim());","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" this.to \u003d LocalDate.parse(to.trim());","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" throw new InvalidDateFormat();","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" String date \u003d String.format(\" (from: %s to: %s)\", this.from.format(f), this.to.format(f));","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" return \"[E]\" + super.toString() + date;","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":27}},{"path":"src/main/java/IndexOutOfRange.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class IndexOutOfRange extends DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public IndexOutOfRange(int idx, int size) {","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(idx + \" is not valid! It must be between 1 and the number of tasks in the list. There are \" + size + \" tasks.\");","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/InvalidDateFormat.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class InvalidDateFormat extends DukeException {","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public InvalidDateFormat() {","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(\"Invalid DateTime Format! Please use yyyy-mm-dd\");","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/InvalidDeadlineFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class InvalidDeadlineFormatException extends DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public InvalidDeadlineFormatException() {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(\"/by argument needed for deadline\");","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/InvalidEventFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class InvalidEventFormatException extends DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" public InvalidEventFormatException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" super(\"/from and /to arguments needed for event\");","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Apzure":7}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.io.File;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"public class Storage {","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" private final static String dirPath \u003d \"./data/\";","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" private final static String filePath \u003d \"./data/taskList.txt\";","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" private static File file;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" public static void init() {","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" try{ ","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" create();","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" load();","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" private static void create() throws IOException {","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" File directory \u003d new File(dirPath);","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" if (!directory.exists()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" if (!directory.mkdirs()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Failed to create directory.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Apzure"},"content":" file \u003d new File(directory, \"taskList.txt\");","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Apzure"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Apzure"},"content":" file.createNewFile(); ","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"Apzure"},"content":" public static void store() {","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"Apzure"},"content":" FileWriter fw \u003d null;","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":43,"author":{"gitId":"Apzure"},"content":" // To reset the file","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"Apzure"},"content":" fw \u003d new FileWriter(filePath);","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"Apzure"},"content":" fw.write(\"\");","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"Apzure"},"content":" fw.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"Apzure"},"content":" fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"Apzure"},"content":" for (int i \u003d 1; i \u003c\u003d TaskList.listSize(); i++) {","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"Apzure"},"content":" String textToAppend \u003d TaskList.getTask(i).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"Apzure"},"content":" fw.write(textToAppend + \"\\n\");","lastModifiedDate":"2024-01-28"},{"lineNumber":52,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":53,"author":{"gitId":"Apzure"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Apzure"},"content":" System.out.println(\"An error occurred while storing data: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":55,"author":{"gitId":"Apzure"},"content":" } finally {","lastModifiedDate":"2024-01-28"},{"lineNumber":56,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":57,"author":{"gitId":"Apzure"},"content":" if (fw !\u003d null) {","lastModifiedDate":"2024-01-28"},{"lineNumber":58,"author":{"gitId":"Apzure"},"content":" fw.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":59,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":60,"author":{"gitId":"Apzure"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":61,"author":{"gitId":"Apzure"},"content":" System.out.println(\"An error occurred while closing the FileWriter: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":62,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Apzure"},"content":" private static void load() throws IOException {","lastModifiedDate":"2024-01-28"},{"lineNumber":67,"author":{"gitId":"Apzure"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2024-01-28"},{"lineNumber":68,"author":{"gitId":"Apzure"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":69,"author":{"gitId":"Apzure"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2024-01-28"},{"lineNumber":70,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":71,"author":{"gitId":"Apzure"},"content":" decode(line);","lastModifiedDate":"2024-01-28"},{"lineNumber":72,"author":{"gitId":"Apzure"},"content":" } catch (InvalidDateFormat e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":73,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Decoding Error: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":74,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":75,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":76,"author":{"gitId":"Apzure"},"content":" s.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":77,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":78,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":79,"author":{"gitId":"Apzure"},"content":" private static void decode(String line) throws InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":80,"author":{"gitId":"Apzure"},"content":" DateTimeFormatter originalFormat \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2024-01-28"},{"lineNumber":81,"author":{"gitId":"Apzure"},"content":" DateTimeFormatter newFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2024-01-28"},{"lineNumber":82,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":83,"author":{"gitId":"Apzure"},"content":" String name;","lastModifiedDate":"2024-01-28"},{"lineNumber":84,"author":{"gitId":"Apzure"},"content":" String[] parts;","lastModifiedDate":"2024-01-28"},{"lineNumber":85,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":86,"author":{"gitId":"Apzure"},"content":" char taskType \u003d line.charAt(1);","lastModifiedDate":"2024-01-28"},{"lineNumber":87,"author":{"gitId":"Apzure"},"content":" boolean marked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027 ? true : false; ","lastModifiedDate":"2024-01-28"},{"lineNumber":88,"author":{"gitId":"Apzure"},"content":" Task task;","lastModifiedDate":"2024-01-28"},{"lineNumber":89,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":90,"author":{"gitId":"Apzure"},"content":" line \u003d line.substring(7);","lastModifiedDate":"2024-01-28"},{"lineNumber":91,"author":{"gitId":"Apzure"},"content":" switch (taskType) {","lastModifiedDate":"2024-01-28"},{"lineNumber":92,"author":{"gitId":"Apzure"},"content":" case \u0027T\u0027:","lastModifiedDate":"2024-01-28"},{"lineNumber":93,"author":{"gitId":"Apzure"},"content":" task \u003d new ToDo(line);","lastModifiedDate":"2024-01-28"},{"lineNumber":94,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":95,"author":{"gitId":"Apzure"},"content":" case \u0027D\u0027:","lastModifiedDate":"2024-01-28"},{"lineNumber":96,"author":{"gitId":"Apzure"},"content":" parts \u003d line.split(\"\\\\(by: \");","lastModifiedDate":"2024-01-28"},{"lineNumber":97,"author":{"gitId":"Apzure"},"content":" name \u003d parts[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":98,"author":{"gitId":"Apzure"},"content":" String by \u003d parts[1].substring(0, parts[1].length() - 1).trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":99,"author":{"gitId":"Apzure"},"content":" String by2 \u003d LocalDate.parse(by, originalFormat).format(newFormat).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":100,"author":{"gitId":"Apzure"},"content":" task \u003d new Deadline(name, by2);","lastModifiedDate":"2024-01-28"},{"lineNumber":101,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":102,"author":{"gitId":"Apzure"},"content":" case \u0027E\u0027:","lastModifiedDate":"2024-01-28"},{"lineNumber":103,"author":{"gitId":"Apzure"},"content":" parts \u003d line.split(\"\\\\(from: \");","lastModifiedDate":"2024-01-28"},{"lineNumber":104,"author":{"gitId":"Apzure"},"content":" name \u003d parts[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":105,"author":{"gitId":"Apzure"},"content":" String[] parts2 \u003d parts[1].split(\"to: \");","lastModifiedDate":"2024-01-28"},{"lineNumber":106,"author":{"gitId":"Apzure"},"content":" String from \u003d parts2[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":107,"author":{"gitId":"Apzure"},"content":" String from2 \u003d LocalDate.parse(from, originalFormat).format(newFormat).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":108,"author":{"gitId":"Apzure"},"content":" String to \u003d parts2[1].substring(0, parts2[1].length() - 1).trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":109,"author":{"gitId":"Apzure"},"content":" String to2 \u003d LocalDate.parse(to, originalFormat).format(newFormat).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":110,"author":{"gitId":"Apzure"},"content":" task \u003d new Event(name, from2, to2);","lastModifiedDate":"2024-01-28"},{"lineNumber":111,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":112,"author":{"gitId":"Apzure"},"content":" default:","lastModifiedDate":"2024-01-28"},{"lineNumber":113,"author":{"gitId":"Apzure"},"content":" task \u003d new ToDo(\"ERROR\");","lastModifiedDate":"2024-01-28"},{"lineNumber":114,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Error: Decoding Error, task does not match any of the known types\"); ","lastModifiedDate":"2024-01-28"},{"lineNumber":115,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":116,"author":{"gitId":"Apzure"},"content":" TaskList.addTaskSlient(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":117,"author":{"gitId":"Apzure"},"content":" if (marked) {","lastModifiedDate":"2024-01-28"},{"lineNumber":118,"author":{"gitId":"Apzure"},"content":" TaskList.markTaskSilent(TaskList.listSize());","lastModifiedDate":"2024-01-28"},{"lineNumber":119,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":120,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":121,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":122,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"Apzure":122}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" private String name;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" private boolean isDone;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" String check \u003d isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" return check + this.name;","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" public String toString2() {","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" return this.name;","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" public void done() {","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" public void undone() {","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Apzure":27}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class TaskList {","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" static ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" public static void create() {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" public static void list() {","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" System.out.println(\"You have no tasks! Hooray!!!!!!!!!!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" else {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" int number \u003d i + 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" System.out.println(number + \". \" + taskList.get(i).toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" public static int listSize() {","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" return taskList.size();","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" public static void addTask(Task task) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" taskList.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":" System.out.println(String.format(\"Now you have %d tasks in the list.\", taskList.size())); ","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Apzure"},"content":" public static void addTaskSlient(Task task) {","lastModifiedDate":"2024-01-28"},{"lineNumber":35,"author":{"gitId":"Apzure"},"content":" taskList.add(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Apzure"},"content":" public static void markTask(int idx) {","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Apzure"},"content":" task.done();","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"Apzure"},"content":" public static void markTaskSilent(int idx) {","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"Apzure"},"content":" task.done();","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"Apzure"},"content":" public static void unmarkTask(int idx) {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Apzure"},"content":" task.undone();","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Apzure"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Apzure"},"content":" public static void deleteTask(int idx) {","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Apzure"},"content":" System.out.println(String.format(\"Now you have %d tasks in the list.\", taskList.size()-1));","lastModifiedDate":"2024-01-28"},{"lineNumber":63,"author":{"gitId":"Apzure"},"content":" taskList.remove(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":66,"author":{"gitId":"Apzure"},"content":" public static Task getTask(int idx) {","lastModifiedDate":"2024-01-28"},{"lineNumber":67,"author":{"gitId":"Apzure"},"content":" return taskList.get(idx-1);","lastModifiedDate":"2024-01-28"},{"lineNumber":68,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":69,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"Apzure":69}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class ToDo extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" public ToDo(String name) {","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":11}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"blah ","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"todo study","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"deadline worksheet /by Friday","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"event hiking /from 2pm /to 5pm","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"deadline /from Sunday","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"event party /FROM 7pm /to 9pm","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"event conference /from 9am /to 11am","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":"todo ","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":"mark 1","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":"deadline now /BYE","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":"deadline /by Saturday","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":"todo reading","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":"event /from 1pm /to 4pm","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":"event","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":"delete 2","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":"event something /from 5pm /TOO 4pm","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":"mark 1","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"mark 2","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":"unmark 1","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":"delete 3","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":"delete 1","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":"bye","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Apzure":31}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"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":"Apzure"},"content":"java -classpath ..\\bin Bird \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"Apzure":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":"Apzure"},"content":"java -classpath ../bin Bird \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-26"},{"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":{"Apzure":1,"-":37}}] +[{"path":"src/main/java/ArgumentNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class ArgumentNotFoundException extends DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" public ArgumentNotFoundException(String command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" super(\"Arguments are required for \" + command);","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":7}},{"path":"src/main/java/Bird.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class Bird {","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" private Ui ui;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" public static void main(String[] args) { ","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" new Bird();","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" public Bird() {","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" greet();","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" TaskList.create();","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" Storage.init();","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" ui.scan();","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" public static void greet() {","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" System.out.println(\" /\\\\_/\\\\\");","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" System.out.println(\"((@v@))\");","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" System.out.println(\"():::()\");","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" System.out.println(\" VV-VV\");","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" public static void goodbye() {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Apzure":30}},{"path":"src/main/java/CommandHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"public class CommandHandler {","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" public enum Command {","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" BYE,","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" LIST,","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" MARK,","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" UNMARK,","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" DELETE,","lastModifiedDate":"2024-01-26"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" TODO,","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" DEADLINE,","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" EVENT","lastModifiedDate":"2024-01-26"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" public static boolean executeCommand(String userInput) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" String[] words \u003d userInput.split(\"\\\\s+\");","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" Command command \u003d null;","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" command \u003d Command.valueOf(words[0].toUpperCase()); ","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" String commandStr \u003d words[0];","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" throw new CommandNotFoundException(commandStr);","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" switch (command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" case BYE:","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" Bird.goodbye();","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":" return true;","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":" case LIST:","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":" TaskList.list();","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Apzure"},"content":" default:","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"Apzure"},"content":" // The logic below is for commands with arguments","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Apzure"},"content":" String arguments \u003d \"\";","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Apzure"},"content":" arguments \u003d userInput.substring(command.name().length() + 1);","lastModifiedDate":"2024-01-26"},{"lineNumber":38,"author":{"gitId":"Apzure"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":39,"author":{"gitId":"Apzure"},"content":" throw new ArgumentNotFoundException(command.name());","lastModifiedDate":"2024-01-26"},{"lineNumber":40,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Apzure"},"content":" switch (command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Apzure"},"content":" case MARK:","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"Apzure"},"content":" TaskList.markTask(processTaskIdx(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Apzure"},"content":" case UNMARK:","lastModifiedDate":"2024-01-26"},{"lineNumber":46,"author":{"gitId":"Apzure"},"content":" TaskList.unmarkTask(processTaskIdx(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Apzure"},"content":" case DELETE:","lastModifiedDate":"2024-01-26"},{"lineNumber":49,"author":{"gitId":"Apzure"},"content":" TaskList.deleteTask(processTaskIdx(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Apzure"},"content":" case TODO:","lastModifiedDate":"2024-01-26"},{"lineNumber":52,"author":{"gitId":"Apzure"},"content":" TaskList.addTask(processToDo(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Apzure"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-26"},{"lineNumber":55,"author":{"gitId":"Apzure"},"content":" TaskList.addTask(processDeadline(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Apzure"},"content":" case EVENT:","lastModifiedDate":"2024-01-26"},{"lineNumber":58,"author":{"gitId":"Apzure"},"content":" TaskList.addTask(processEvent(arguments));","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Apzure"},"content":" default:","lastModifiedDate":"2024-01-26"},{"lineNumber":61,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Error: CommandSet Hashtable contains a command that is not implemented in the switch statement!\");","lastModifiedDate":"2024-01-26"},{"lineNumber":62,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-26"},{"lineNumber":63,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Apzure"},"content":" // To store the updated Task List","lastModifiedDate":"2024-01-28"},{"lineNumber":65,"author":{"gitId":"Apzure"},"content":" Storage.store();","lastModifiedDate":"2024-01-28"},{"lineNumber":66,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"Apzure"},"content":" return false;","lastModifiedDate":"2024-01-26"},{"lineNumber":68,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-26"},{"lineNumber":70,"author":{"gitId":"Apzure"},"content":" private static int processTaskIdx(String arguments) throws IndexOutOfRange{","lastModifiedDate":"2024-01-26"},{"lineNumber":71,"author":{"gitId":"Apzure"},"content":" int idx \u003d Integer.parseInt(arguments);","lastModifiedDate":"2024-01-26"},{"lineNumber":72,"author":{"gitId":"Apzure"},"content":" int size \u003d TaskList.listSize();","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"Apzure"},"content":" if (idx \u003c\u003d 0 || idx \u003e size) {","lastModifiedDate":"2024-01-26"},{"lineNumber":74,"author":{"gitId":"Apzure"},"content":" throw new IndexOutOfRange(idx, size);","lastModifiedDate":"2024-01-26"},{"lineNumber":75,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":76,"author":{"gitId":"Apzure"},"content":" return idx;","lastModifiedDate":"2024-01-26"},{"lineNumber":77,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":78,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Apzure"},"content":" private static ToDo processToDo(String arguments) {","lastModifiedDate":"2024-01-25"},{"lineNumber":80,"author":{"gitId":"Apzure"},"content":" return new ToDo(arguments);","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Apzure"},"content":" private static Deadline processDeadline(String arguments) throws InvalidDeadlineFormatException, InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":84,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":85,"author":{"gitId":"Apzure"},"content":" String[] parts \u003d arguments.split(\"/by \");","lastModifiedDate":"2024-01-25"},{"lineNumber":86,"author":{"gitId":"Apzure"},"content":" return new Deadline(parts[0], parts[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Apzure"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":88,"author":{"gitId":"Apzure"},"content":" throw new InvalidDeadlineFormatException();","lastModifiedDate":"2024-01-26"},{"lineNumber":89,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":90,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":91,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Apzure"},"content":" private static Event processEvent(String arguments) throws InvalidEventFormatException, InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":93,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":94,"author":{"gitId":"Apzure"},"content":" String[] parts \u003d arguments.split(\"/from \");","lastModifiedDate":"2024-01-25"},{"lineNumber":95,"author":{"gitId":"Apzure"},"content":" String[] parts2 \u003d parts[1].split(\"/to \");","lastModifiedDate":"2024-01-25"},{"lineNumber":96,"author":{"gitId":"Apzure"},"content":" return new Event(parts[0], parts2[0], parts2[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":97,"author":{"gitId":"Apzure"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":98,"author":{"gitId":"Apzure"},"content":" throw new InvalidEventFormatException();","lastModifiedDate":"2024-01-26"},{"lineNumber":99,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":100,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":101,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"},{"lineNumber":102,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":102}},{"path":"src/main/java/CommandNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class CommandNotFoundException extends DukeException{","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public CommandNotFoundException(String command) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(command + \" is not a valid command!\");","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" private LocalDate date;","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" static final DateTimeFormatter f \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" public Deadline(String name, String date) throws InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" this.date \u003d LocalDate.parse(date);","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" throw new InvalidDateFormat();","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" String date \u003d String.format(\" (by: %s)\", this.date.format(f));","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" return \"[D]\" + super.toString() + date;","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":23}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public DukeException(String eString) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(\"Exception: \" + eString);","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" LocalDate from;","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" LocalDate to;","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" static final DateTimeFormatter f \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" public Event(String name, String from, String to) throws InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" super(name.trim());","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" this.from \u003d LocalDate.parse(from.trim());","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" this.to \u003d LocalDate.parse(to.trim());","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" throw new InvalidDateFormat();","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" String date \u003d String.format(\" (from: %s to: %s)\", this.from.format(f), this.to.format(f));","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" return \"[E]\" + super.toString() + date;","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":27}},{"path":"src/main/java/IndexOutOfRange.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class IndexOutOfRange extends DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public IndexOutOfRange(int idx, int size) {","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(idx + \" is not valid! It must be between 1 and the number of tasks in the list. There are \" + size + \" tasks.\");","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/InvalidDateFormat.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class InvalidDateFormat extends DukeException {","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public InvalidDateFormat() {","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(\"Invalid DateTime Format! Please use yyyy-mm-dd\");","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/InvalidDeadlineFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class InvalidDeadlineFormatException extends DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" public InvalidDeadlineFormatException() {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" super(\"/by argument needed for deadline\");","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":5}},{"path":"src/main/java/InvalidEventFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class InvalidEventFormatException extends DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" public InvalidEventFormatException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" super(\"/from and /to arguments needed for event\");","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Apzure":7}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.io.File;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"public class Storage {","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" private final static String dirPath \u003d \"./data/\";","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" private final static String filePath \u003d \"./data/taskList.txt\";","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" private static File file;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" public static void init() {","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" try{ ","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" create();","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" load();","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" private static void create() throws IOException {","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" File directory \u003d new File(dirPath);","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" if (!directory.exists()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" if (!directory.mkdirs()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Failed to create directory.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Apzure"},"content":" file \u003d new File(directory, \"taskList.txt\");","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Apzure"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Apzure"},"content":" file.createNewFile(); ","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"Apzure"},"content":" public static void store() {","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"Apzure"},"content":" FileWriter fw \u003d null;","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":43,"author":{"gitId":"Apzure"},"content":" // To reset the file","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"Apzure"},"content":" fw \u003d new FileWriter(filePath);","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"Apzure"},"content":" fw.write(\"\");","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"Apzure"},"content":" fw.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"Apzure"},"content":" fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"Apzure"},"content":" for (int i \u003d 1; i \u003c\u003d TaskList.listSize(); i++) {","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"Apzure"},"content":" String textToAppend \u003d TaskList.getTask(i).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"Apzure"},"content":" fw.write(textToAppend + \"\\n\");","lastModifiedDate":"2024-01-28"},{"lineNumber":52,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":53,"author":{"gitId":"Apzure"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Apzure"},"content":" System.out.println(\"An error occurred while storing data: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":55,"author":{"gitId":"Apzure"},"content":" } finally {","lastModifiedDate":"2024-01-28"},{"lineNumber":56,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":57,"author":{"gitId":"Apzure"},"content":" if (fw !\u003d null) {","lastModifiedDate":"2024-01-28"},{"lineNumber":58,"author":{"gitId":"Apzure"},"content":" fw.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":59,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":60,"author":{"gitId":"Apzure"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":61,"author":{"gitId":"Apzure"},"content":" System.out.println(\"An error occurred while closing the FileWriter: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":62,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Apzure"},"content":" private static void load() throws IOException {","lastModifiedDate":"2024-01-28"},{"lineNumber":67,"author":{"gitId":"Apzure"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2024-01-28"},{"lineNumber":68,"author":{"gitId":"Apzure"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":69,"author":{"gitId":"Apzure"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2024-01-28"},{"lineNumber":70,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":71,"author":{"gitId":"Apzure"},"content":" decode(line);","lastModifiedDate":"2024-01-28"},{"lineNumber":72,"author":{"gitId":"Apzure"},"content":" } catch (InvalidDateFormat e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":73,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Decoding Error: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":74,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":75,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":76,"author":{"gitId":"Apzure"},"content":" s.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":77,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":78,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":79,"author":{"gitId":"Apzure"},"content":" private static void decode(String line) throws InvalidDateFormat {","lastModifiedDate":"2024-01-28"},{"lineNumber":80,"author":{"gitId":"Apzure"},"content":" DateTimeFormatter originalFormat \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2024-01-28"},{"lineNumber":81,"author":{"gitId":"Apzure"},"content":" DateTimeFormatter newFormat \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2024-01-28"},{"lineNumber":82,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":83,"author":{"gitId":"Apzure"},"content":" String name;","lastModifiedDate":"2024-01-28"},{"lineNumber":84,"author":{"gitId":"Apzure"},"content":" String[] parts;","lastModifiedDate":"2024-01-28"},{"lineNumber":85,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":86,"author":{"gitId":"Apzure"},"content":" char taskType \u003d line.charAt(1);","lastModifiedDate":"2024-01-28"},{"lineNumber":87,"author":{"gitId":"Apzure"},"content":" boolean marked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027 ? true : false; ","lastModifiedDate":"2024-01-28"},{"lineNumber":88,"author":{"gitId":"Apzure"},"content":" Task task;","lastModifiedDate":"2024-01-28"},{"lineNumber":89,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":90,"author":{"gitId":"Apzure"},"content":" line \u003d line.substring(7);","lastModifiedDate":"2024-01-28"},{"lineNumber":91,"author":{"gitId":"Apzure"},"content":" switch (taskType) {","lastModifiedDate":"2024-01-28"},{"lineNumber":92,"author":{"gitId":"Apzure"},"content":" case \u0027T\u0027:","lastModifiedDate":"2024-01-28"},{"lineNumber":93,"author":{"gitId":"Apzure"},"content":" task \u003d new ToDo(line);","lastModifiedDate":"2024-01-28"},{"lineNumber":94,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":95,"author":{"gitId":"Apzure"},"content":" case \u0027D\u0027:","lastModifiedDate":"2024-01-28"},{"lineNumber":96,"author":{"gitId":"Apzure"},"content":" parts \u003d line.split(\"\\\\(by: \");","lastModifiedDate":"2024-01-28"},{"lineNumber":97,"author":{"gitId":"Apzure"},"content":" name \u003d parts[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":98,"author":{"gitId":"Apzure"},"content":" String by \u003d parts[1].substring(0, parts[1].length() - 1).trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":99,"author":{"gitId":"Apzure"},"content":" String by2 \u003d LocalDate.parse(by, originalFormat).format(newFormat).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":100,"author":{"gitId":"Apzure"},"content":" task \u003d new Deadline(name, by2);","lastModifiedDate":"2024-01-28"},{"lineNumber":101,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":102,"author":{"gitId":"Apzure"},"content":" case \u0027E\u0027:","lastModifiedDate":"2024-01-28"},{"lineNumber":103,"author":{"gitId":"Apzure"},"content":" parts \u003d line.split(\"\\\\(from: \");","lastModifiedDate":"2024-01-28"},{"lineNumber":104,"author":{"gitId":"Apzure"},"content":" name \u003d parts[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":105,"author":{"gitId":"Apzure"},"content":" String[] parts2 \u003d parts[1].split(\"to: \");","lastModifiedDate":"2024-01-28"},{"lineNumber":106,"author":{"gitId":"Apzure"},"content":" String from \u003d parts2[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":107,"author":{"gitId":"Apzure"},"content":" String from2 \u003d LocalDate.parse(from, originalFormat).format(newFormat).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":108,"author":{"gitId":"Apzure"},"content":" String to \u003d parts2[1].substring(0, parts2[1].length() - 1).trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":109,"author":{"gitId":"Apzure"},"content":" String to2 \u003d LocalDate.parse(to, originalFormat).format(newFormat).toString();","lastModifiedDate":"2024-01-28"},{"lineNumber":110,"author":{"gitId":"Apzure"},"content":" task \u003d new Event(name, from2, to2);","lastModifiedDate":"2024-01-28"},{"lineNumber":111,"author":{"gitId":"Apzure"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":112,"author":{"gitId":"Apzure"},"content":" default:","lastModifiedDate":"2024-01-28"},{"lineNumber":113,"author":{"gitId":"Apzure"},"content":" task \u003d new ToDo(\"ERROR\");","lastModifiedDate":"2024-01-28"},{"lineNumber":114,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Error: Decoding Error, task does not match any of the known types\"); ","lastModifiedDate":"2024-01-28"},{"lineNumber":115,"author":{"gitId":"Apzure"},"content":" } ","lastModifiedDate":"2024-01-28"},{"lineNumber":116,"author":{"gitId":"Apzure"},"content":" TaskList.addTaskSlient(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":117,"author":{"gitId":"Apzure"},"content":" if (marked) {","lastModifiedDate":"2024-01-28"},{"lineNumber":118,"author":{"gitId":"Apzure"},"content":" TaskList.markTaskSilent(TaskList.listSize());","lastModifiedDate":"2024-01-28"},{"lineNumber":119,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":120,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":121,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":122,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"Apzure":122}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" private String name;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" private boolean isDone;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" String check \u003d isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" return check + this.name;","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" public String toString2() {","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" return this.name;","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" public void done() {","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" public void undone() {","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Apzure":27}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class TaskList {","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" static ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" public static void create() {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" public static void list() {","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" System.out.println(\"You have no tasks! Hooray!!!!!!!!!!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" else {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" int number \u003d i + 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" System.out.println(number + \". \" + taskList.get(i).toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":" public static int listSize() {","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":" return taskList.size();","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":" public static void addTask(Task task) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":" taskList.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":" System.out.println(String.format(\"Now you have %d tasks in the list.\", taskList.size())); ","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Apzure"},"content":" public static void addTaskSlient(Task task) {","lastModifiedDate":"2024-01-28"},{"lineNumber":35,"author":{"gitId":"Apzure"},"content":" taskList.add(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Apzure"},"content":" public static void markTask(int idx) {","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Apzure"},"content":" task.done();","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"Apzure"},"content":" public static void markTaskSilent(int idx) {","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"Apzure"},"content":" task.done();","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"Apzure"},"content":" public static void unmarkTask(int idx) {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Apzure"},"content":" task.undone();","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Apzure"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Apzure"},"content":" public static void deleteTask(int idx) {","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Apzure"},"content":" Task task \u003d taskList.get(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"Apzure"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"Apzure"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Apzure"},"content":" System.out.println(String.format(\"Now you have %d tasks in the list.\", taskList.size()-1));","lastModifiedDate":"2024-01-28"},{"lineNumber":63,"author":{"gitId":"Apzure"},"content":" taskList.remove(idx-1);","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":66,"author":{"gitId":"Apzure"},"content":" public static Task getTask(int idx) {","lastModifiedDate":"2024-01-28"},{"lineNumber":67,"author":{"gitId":"Apzure"},"content":" return taskList.get(idx-1);","lastModifiedDate":"2024-01-28"},{"lineNumber":68,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":69,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"Apzure":69}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"public class ToDo extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":" public ToDo(String name) {","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Apzure":11}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"public class Ui {","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":" public Ui() {","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":" ","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":" public void scan() {","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":" boolean exitScan \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":" while (!exitScan) {","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":" exitScan \u003d CommandHandler.executeCommand(userInput);","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":" scanner.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"Apzure":23}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Apzure"},"content":"blah ","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Apzure"},"content":"todo study","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Apzure"},"content":"deadline worksheet /by Friday","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Apzure"},"content":"event hiking /from 2pm /to 5pm","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Apzure"},"content":"deadline /from Sunday","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Apzure"},"content":"event party /FROM 7pm /to 9pm","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"Apzure"},"content":"event conference /from 9am /to 11am","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Apzure"},"content":"todo ","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Apzure"},"content":"mark 1","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Apzure"},"content":"deadline now /BYE","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Apzure"},"content":"deadline /by Saturday","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Apzure"},"content":"todo reading","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Apzure"},"content":"event /from 1pm /to 4pm","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Apzure"},"content":"event","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Apzure"},"content":"delete 2","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Apzure"},"content":"event something /from 5pm /TOO 4pm","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Apzure"},"content":"mark 1","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Apzure"},"content":"mark 2","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Apzure"},"content":"unmark 1","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Apzure"},"content":"delete 3","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Apzure"},"content":"list","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Apzure"},"content":"delete 1","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Apzure"},"content":"bye","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Apzure"},"content":"","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Apzure":31}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"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":"Apzure"},"content":"java -classpath ..\\bin Bird \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"Apzure":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":"Apzure"},"content":"java -classpath ../bin Bird \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-26"},{"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":{"Apzure":1,"-":37}}] diff --git a/Apzure_ip_master/commits.json b/Apzure_ip_master/commits.json index 7c2104e6..ba0cfd99 100644 --- a/Apzure_ip_master/commits.json +++ b/Apzure_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Apzure":[{"date":"2024-01-24","commitResults":[{"hash":"4bea9d6e76a183c6e0b8b1211073a99fc5992ebb","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"9637137b76ee426c26ac7d91ff5dfdf55f9f6cf1","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"3dedc189a357c9e76fc438eae70d1370b5035ef7","isMergeCommit":false,"messageTitle":"Level-2 and Level-3","messageBody":"","tags":["Level-3","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":3}}}]},{"date":"2024-01-25","commitResults":[{"hash":"ba8c1b2914037eb4b09f0213e3b42274058b1997","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":38}}},{"hash":"f14aace71e5d9761395cc0a4ab8b00166ccf2d2c","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":28}}},{"hash":"ac1afb12a06e49bedaac23b30759925223c80d97","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":16}}},{"hash":"9c19586fc7e954841e53b629de281c3ffbfe7f36","isMergeCommit":false,"messageTitle":"More Error-Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"93e41b62f4460f8f8cd44539632fb63f2aff96f8","isMergeCommit":false,"messageTitle":"More Error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2024-01-26","commitResults":[{"hash":"eb56fe22ad3f9772bff4050c3753edc9076fd754","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":26,"deletions":0},"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"0f10acbf6db16e691b03d30d57d669c692560136","isMergeCommit":false,"messageTitle":"Fix and better Error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":66}}},{"hash":"3528ffe9734f78cc9d24d701fea66c87ae65b9f8","isMergeCommit":false,"messageTitle":"Error handling for event command arguments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"c3dafaee4d0016869add86879055f963ddb2369d","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":32}}},{"hash":"082e44d83dfcf1ddff22db00e8cebd80d35546b9","isMergeCommit":false,"messageTitle":"Custom Message if you have no tasks when doing list command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"90892a912916ff9b5fa374f68d6c2229281b22ea","isMergeCommit":false,"messageTitle":"Error Handling if the idx for commands like mark, unmark is out of range","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}}]},{"date":"2024-01-27","commitResults":[{"hash":"ffe38a98cff968195eb628a1489f2f1d9dfc2c30","isMergeCommit":false,"messageTitle":"Initial File and Folder Creation for Data Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":36,"deletions":0}}},{"hash":"5704ac52e3c32116f595733789936bf868fd9ae9","isMergeCommit":false,"messageTitle":"More Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"8ff07c5b7dac23ccac8c619ac2e6cf360caa3f76","isMergeCommit":false,"messageTitle":"Segemation of Tasklist into a new class, away from Bird","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":61}}}]},{"date":"2024-01-28","commitResults":[{"hash":"72f0c6372d50e39f392cdf504d332c4fc97ed499","isMergeCommit":false,"messageTitle":"Functionality to Store TaskList whenever it is updated","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":7}}},{"hash":"b20e145f1b9ff42f7325aad4f2b06c2dd7a7f935","isMergeCommit":false,"messageTitle":"Storage fully functional","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":2},"java":{"insertions":67,"deletions":12}}},{"hash":"787a32d142595b3be42958392367d5f892d48228","isMergeCommit":false,"messageTitle":"Bugfix for error handling of invalid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"d4b384065340bc8ee2e3df3164068bab94a9fc97","isMergeCommit":false,"messageTitle":"Cleaning up import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"d30c8514f62e4e6e1ae2d181aea85b82dcec555c","isMergeCommit":false,"messageTitle":"Updated test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":7}}},{"hash":"b126dbd3b509f65fa0c859e13dbfb5dc126f6d29","isMergeCommit":false,"messageTitle":"Removed Debugging print statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"0e50eaf78296f5cdec081cda107f7722d89713e2","isMergeCommit":false,"messageTitle":"Removed","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":8}}},{"hash":"78f34e83637b2437d0fdb939f405b0ffd1075367","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1b844a9cc1a80de8bb8b534c61ecae3bedff1e17","isMergeCommit":false,"messageTitle":"LocalDate Format implemented","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":34}}},{"hash":"a17f5e64932d25136ed1516305913a7cf6349958","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Apzure":{"java":459,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":31}},"authorContributionVariance":{"Apzure":17508.49},"authorDisplayNameMap":{"Apzure":"CS2103T-T10-3 NIGE..N YI"}} +{"authorDailyContributionsMap":{"Apzure":[{"date":"2024-01-24","commitResults":[{"hash":"4bea9d6e76a183c6e0b8b1211073a99fc5992ebb","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"9637137b76ee426c26ac7d91ff5dfdf55f9f6cf1","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"3dedc189a357c9e76fc438eae70d1370b5035ef7","isMergeCommit":false,"messageTitle":"Level-2 and Level-3","messageBody":"","tags":["Level-3","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":3}}}]},{"date":"2024-01-25","commitResults":[{"hash":"ba8c1b2914037eb4b09f0213e3b42274058b1997","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":126,"deletions":38}}},{"hash":"f14aace71e5d9761395cc0a4ab8b00166ccf2d2c","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":28}}},{"hash":"ac1afb12a06e49bedaac23b30759925223c80d97","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":16}}},{"hash":"9c19586fc7e954841e53b629de281c3ffbfe7f36","isMergeCommit":false,"messageTitle":"More Error-Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":6}}},{"hash":"93e41b62f4460f8f8cd44539632fb63f2aff96f8","isMergeCommit":false,"messageTitle":"More Error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]},{"date":"2024-01-26","commitResults":[{"hash":"eb56fe22ad3f9772bff4050c3753edc9076fd754","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":26,"deletions":0},"java":{"insertions":2,"deletions":2},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"0f10acbf6db16e691b03d30d57d669c692560136","isMergeCommit":false,"messageTitle":"Fix and better Error Handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":66}}},{"hash":"3528ffe9734f78cc9d24d701fea66c87ae65b9f8","isMergeCommit":false,"messageTitle":"Error handling for event command arguments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"c3dafaee4d0016869add86879055f963ddb2369d","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":32}}},{"hash":"082e44d83dfcf1ddff22db00e8cebd80d35546b9","isMergeCommit":false,"messageTitle":"Custom Message if you have no tasks when doing list command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":4}}},{"hash":"90892a912916ff9b5fa374f68d6c2229281b22ea","isMergeCommit":false,"messageTitle":"Error Handling if the idx for commands like mark, unmark is out of range","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}}]},{"date":"2024-01-27","commitResults":[{"hash":"ffe38a98cff968195eb628a1489f2f1d9dfc2c30","isMergeCommit":false,"messageTitle":"Initial File and Folder Creation for Data Storage","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":36,"deletions":0}}},{"hash":"5704ac52e3c32116f595733789936bf868fd9ae9","isMergeCommit":false,"messageTitle":"More Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"8ff07c5b7dac23ccac8c619ac2e6cf360caa3f76","isMergeCommit":false,"messageTitle":"Segemation of Tasklist into a new class, away from Bird","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":61}}}]},{"date":"2024-01-28","commitResults":[{"hash":"72f0c6372d50e39f392cdf504d332c4fc97ed499","isMergeCommit":false,"messageTitle":"Functionality to Store TaskList whenever it is updated","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":7}}},{"hash":"b20e145f1b9ff42f7325aad4f2b06c2dd7a7f935","isMergeCommit":false,"messageTitle":"Storage fully functional","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":2},"java":{"insertions":67,"deletions":12}}},{"hash":"787a32d142595b3be42958392367d5f892d48228","isMergeCommit":false,"messageTitle":"Bugfix for error handling of invalid commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":5}}},{"hash":"d4b384065340bc8ee2e3df3164068bab94a9fc97","isMergeCommit":false,"messageTitle":"Cleaning up import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"d30c8514f62e4e6e1ae2d181aea85b82dcec555c","isMergeCommit":false,"messageTitle":"Updated test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":7}}},{"hash":"b126dbd3b509f65fa0c859e13dbfb5dc126f6d29","isMergeCommit":false,"messageTitle":"Removed Debugging print statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"0e50eaf78296f5cdec081cda107f7722d89713e2","isMergeCommit":false,"messageTitle":"Removed","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":8}}},{"hash":"78f34e83637b2437d0fdb939f405b0ffd1075367","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"1b844a9cc1a80de8bb8b534c61ecae3bedff1e17","isMergeCommit":false,"messageTitle":"LocalDate Format implemented","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":34}}},{"hash":"a17f5e64932d25136ed1516305913a7cf6349958","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2024-01-30","commitResults":[{"hash":"2bdca0a8ddb165946e63b085443e8554a4e3cacc","isMergeCommit":false,"messageTitle":"Initial Creation of UI","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":17}}}]}]},"authorFileTypeContributionMap":{"Apzure":{"java":473,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":31}},"authorContributionVariance":{"Apzure":15942.5205},"authorDisplayNameMap":{"Apzure":"CS2103T-T10-3 NIGE..N YI"}} diff --git a/Bandov_ip_master/authorship.json b/Bandov_ip_master/authorship.json index 37fce701..395b75e1 100644 --- a/Bandov_ip_master/authorship.json +++ b/Bandov_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":"Bandov"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"checkstyle {","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" toolVersion \u003d \"8.23\"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" configFile \u003d rootProject.file(\"config/checkstyle/checkstyle.xml\")","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" ignoreFailures \u003d false","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" showViolations \u003d true","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" maxWarnings \u003d 0","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" maxErrors \u003d 0","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" sourceSets \u003d [sourceSets.main]","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2024-01-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","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":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Bandov":13,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" * The Deadline class represents a task with a deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" protected LocalDate by;","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" * Constructor for Deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-20"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" return \"[D]\" + (isDone ? \"[X] \" : \"[ ] \") + super.description + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-20"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" * Returns the string representation of the deadline to be stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * @return The string representation of the deadline to be stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" public String toFileString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" return \"D\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + by;","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" * Returns a Deadline instance from the string representation of the deadline stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" * @param str The string representation of the deadline stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" * @return The Deadline instance from the string representation of the deadline stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" public static Deadline fromFileString(String str) {","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d str.split(\" \\\\| \");","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" if (!parts[0].equals(\"D\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" return null;","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" LocalDate by \u003d LocalDate.parse(parts[3].trim());","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" if (isDone) {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" deadline.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" return deadline;","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" * Returns the date of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" * @return The date of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" public String getDate() {","lastModifiedDate":"2024-01-26"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" return by.toString();","lastModifiedDate":"2024-01-26"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Bandov":73}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" * The Duke class is the main class of the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" * It is responsible for the initialization of the Storage and TaskList instances.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" * It also contains the main method that serves as the entry point for the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"public class Duke {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" private Storage storage;","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" private static TaskList tasks;","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" * Constructor for Duke.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" * Initializes the Storage and TaskList instances.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * @param filePath The path to the file where the task list is stored.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If an error occurs while loading the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" public Duke(String filePath) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-22"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" Ui.showLoadingError();","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" * The main method that serves as the entry point for the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" * Initializes the Duke instance and processes the user input until the \"bye\" command is given.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * @param args Command line arguments (not used).","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" Duke duke \u003d new Duke(\"./data/duke.txt\");","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" Ui.showLoadingError();","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Hello! I\u0027m Bob!\", \"What can I do for you?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" while (isRunning) {","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" String message \u003d scanner.nextLine();","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" Ui.parse(tasks, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" isRunning \u003d !message.equals(\"bye\");","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" Storage.saveCurrentList(tasks);","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" System.out.println(\"------------------------------------------\");","lastModifiedDate":"2024-01-20"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Bandov":62,"-":1}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":" * The DukeException class represents an exception specific to the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" * Constructor for DukeException.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" * @param message The error message.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" public DukeException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Bandov":16}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * Represents an event task with a description, start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" * It extends the Task class by adding time-specific information.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" protected LocalDateTime from;","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" protected LocalDateTime to;","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * Constructs an Event task with the specified description, start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" * @param description The description of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" * @param from The start time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * @param to The end time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-20"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-20"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the event task, including its type, status, description, and timing.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" return \"[E]\" + (isDone ? \"[X] \" : \"[ ] \") + super.description + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2024-01-20"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the event task formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" * @return A string formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" public String toFileString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" return \"E\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + from + \" - \" + to;","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" * Creates an Event object from a string representation formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" * @param str The string representation of the event from a file.","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" * @return An Event object, or null if the string format is invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" public static Event fromFileString(String str) {","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d str.split(\" \\\\| \");","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" if (!parts[0].equals(\"E\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" return null; // or throw an exception","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" String[] times \u003d parts[3].split(\" - \");","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" if (times.length \u003c 2) {","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" return null;","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" String from \u003d times[0].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" String to \u003d times[1].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm\");","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeFrom \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeTo \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" Event event \u003d new Event(description, dateTimeFrom, dateTimeTo);","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" if (isDone) {","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" event.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" return event;","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" * Returns the start time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the start time.","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" public String getFromDate() {","lastModifiedDate":"2024-01-26"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" return from.toString();","lastModifiedDate":"2024-01-26"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" * Returns the end time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" public String getToDate() {","lastModifiedDate":"2024-01-26"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" return to.toString();","lastModifiedDate":"2024-01-26"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Bandov":94}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" * The Parser class represents a parser that parses the user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"public class Parser {","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" * Parses the user input for a \"todo\" command and adds a new Todo task to the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * It throws an exception if the input does not contain a description for the todo.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" * @param list The TaskList to which the new todo task is added.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the todo description is empty.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" public static void handleTodo(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"todo\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" String description \u003d message.substring(5).trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" Task task \u003d new Task(description);","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Got it. I\u0027ve added this task:\", task.toString(),","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" \"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"deadline\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" * Adds a deadline task to the task list with a specified due date.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * @param list The task list to add the deadline to.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the deadline or its date/time format is incorrect.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" public static void handleDeadline(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d message.split(\"/by\", 2);","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The deadline date/time is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" LocalDate date \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" Deadline task \u003d new Deadline(description, date);","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Got it. I\u0027ve added this task:\", task.toString(),","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" \"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The deadline date format is incorrect. Please use yyyy-MM-dd format.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"event\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" * Adds an event task to the task list with specified start and end times.","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" * @param list The task list to add the event to.","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the event time is missing or the date/time format is incorrect.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" public static void handleEvent(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d message.split(\" /from \", 2);","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /to \")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The event time is missing or incomplete buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[0].substring(6).trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" String[] timeParts \u003d parts[1].split(\" /to \", 2);","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" String fromTime \u003d timeParts[0].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" String toTime \u003d timeParts[1].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2024-01-25"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeFrom \u003d LocalDateTime.parse(fromTime, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeTo \u003d LocalDateTime.parse(toTime, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" Event task \u003d new Event(description, dateTimeFrom, dateTimeTo);","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Got it. I\u0027ve added this task:\", task.toString(),","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" \"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The deadline date format is incorrect. \"","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" + \"Please use yyyy-MM-dd HH:mm format.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":" * Handles the \"list\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":" * Displays all tasks in the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"Bandov"},"content":" * @param list The task list to display.","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"Bandov"},"content":" public static void handleList(TaskList list) {","lastModifiedDate":"2024-01-25"},{"lineNumber":99,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cString\u003e taskDescriptions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-25"},{"lineNumber":100,"author":{"gitId":"Bandov"},"content":" taskDescriptions.add(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-25"},{"lineNumber":101,"author":{"gitId":"Bandov"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2024-01-25"},{"lineNumber":102,"author":{"gitId":"Bandov"},"content":" taskDescriptions.add((i + 1) + \". \" + list.get(i).toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":103,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":104,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(taskDescriptions.toArray(new String[0]));","lastModifiedDate":"2024-01-25"},{"lineNumber":105,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":106,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":107,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"mark\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"Bandov"},"content":" * Marks a task as done based on the specified task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"Bandov"},"content":" * @param list The task list containing the task to be marked.","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the task number is missing or invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"Bandov"},"content":" public static void handleMark(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":116,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"mark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":117,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The task number is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":118,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":119,"author":{"gitId":"Bandov"},"content":" int index \u003d Integer.parseInt(message.substring(5).trim()) - 1;","lastModifiedDate":"2024-01-25"},{"lineNumber":120,"author":{"gitId":"Bandov"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":121,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! Task number is invalid buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":122,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":123,"author":{"gitId":"Bandov"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":124,"author":{"gitId":"Bandov"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-25"},{"lineNumber":125,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Nice! I\u0027ve marked this task as done:\", task.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":126,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":127,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":128,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"unmark\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"Bandov"},"content":" * Marks a task as not done based on the specified task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"Bandov"},"content":" * @param list The task list containing the task to be unmarked.","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the task number is missing or invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"Bandov"},"content":" public static void handleUnmark(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":137,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"unmark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":138,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The task number is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":139,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":140,"author":{"gitId":"Bandov"},"content":" int index \u003d Integer.parseInt(message.substring(7).trim()) - 1;","lastModifiedDate":"2024-01-25"},{"lineNumber":141,"author":{"gitId":"Bandov"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":142,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! Task number is invalid buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":143,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":144,"author":{"gitId":"Bandov"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":145,"author":{"gitId":"Bandov"},"content":" task.unMarkAsDone();","lastModifiedDate":"2024-01-25"},{"lineNumber":146,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"OK, I\u0027ve marked this task as not done yet:\", task.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":147,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":148,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":149,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":150,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"delete\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":151,"author":{"gitId":"Bandov"},"content":" * Deletes a task from the task list based on the specified task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":152,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":153,"author":{"gitId":"Bandov"},"content":" * @param list The task list from which to delete the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":154,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":155,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the task number is missing or invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":156,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":157,"author":{"gitId":"Bandov"},"content":" public static void deleteTask(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":158,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"delete\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":159,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The task number is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":160,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":161,"author":{"gitId":"Bandov"},"content":" int index \u003d Integer.parseInt(message.substring(7).trim()) - 1;","lastModifiedDate":"2024-01-25"},{"lineNumber":162,"author":{"gitId":"Bandov"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":163,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! Task number is invalid buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":164,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":165,"author":{"gitId":"Bandov"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":166,"author":{"gitId":"Bandov"},"content":" list.remove(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":167,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"OK, I\u0027ve deleted this task:\", task.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":168,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":169,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":170,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":171,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"find\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":172,"author":{"gitId":"Bandov"},"content":" * Finds all tasks in the task list that contain the specified keyword.","lastModifiedDate":"2024-01-27"},{"lineNumber":173,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":174,"author":{"gitId":"Bandov"},"content":" * @param list The task list to search for matching tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":175,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":176,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the keyword is missing.","lastModifiedDate":"2024-01-27"},{"lineNumber":177,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":178,"author":{"gitId":"Bandov"},"content":" public static void findTask(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-27"},{"lineNumber":179,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"find\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":180,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The keyword is missing buddy.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":181,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":182,"author":{"gitId":"Bandov"},"content":" String keyword \u003d message.substring(5).trim();","lastModifiedDate":"2024-01-27"},{"lineNumber":183,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d list.find(keyword);","lastModifiedDate":"2024-01-27"},{"lineNumber":184,"author":{"gitId":"Bandov"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":185,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"No matching task found.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":186,"author":{"gitId":"Bandov"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":187,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Here is the matching tasks in your list: \");","lastModifiedDate":"2024-01-27"},{"lineNumber":188,"author":{"gitId":"Bandov"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":189,"author":{"gitId":"Bandov"},"content":" System.out.println((i + 1) + \". \" + matchingTasks.get(i).toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":190,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":191,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":192,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":193,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":193}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.io.File;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" * The Storage class is responsible for handling file operations including","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" * loading tasks from a file and saving tasks to a file.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"public class Storage {","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" protected Scanner scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" protected static String filePath;","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" protected File file;","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * Creates a Storage object which initializes a Scanner for reading from a file.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" * The file path is specified by the provided string.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" * @param filePath The file path of the storage file.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the file is not found.","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" public Storage(String filePath) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" Storage.filePath \u003d filePath;","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" this.scanner \u003d new Scanner(file);","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"Error loading file\");","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * Writes the given text to a file at the specified file path.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * @param filePath The file path where the text is to be written.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" * @param textToAdd The text to write to the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" private static void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" fw.write(textToAdd);","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" fw.close();","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" * Saves the current list of tasks to the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" * @param list The task list to be saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" * @throws IOException If an I/O error occurs during writing.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" public static void saveCurrentList(TaskList list) throws IOException {","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" for (Task task : list.getList()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" sb.append(task.toFileString());","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" writeToFile(filePath, sb.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" * Loads tasks from the file and returns them as an ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If an error occurs while reading from the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" switch (type) {","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" case \"T\":","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" list.add(Task.fromFileString(line));","lastModifiedDate":"2024-01-25"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" case \"D\":","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" list.add(Deadline.fromFileString(line));","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" case \"E\":","lastModifiedDate":"2024-01-25"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" list.add(Event.fromFileString(line));","lastModifiedDate":"2024-01-25"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"Error loading file\");","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" return list;","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":93}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":" * Represents a task with a description and a completion status.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":" * This class serves as the base class for more specific types of tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"public class Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" protected String description;","lastModifiedDate":"2024-01-20"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" * Constructs a Task with the specified description. The task is initially not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-20"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-20"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-20"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" * Returns the description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" * @return The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-20"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" return description;","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" * @return true if the task is done, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" public boolean isDone() {","lastModifiedDate":"2024-01-20"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" return isDone;","lastModifiedDate":"2024-01-20"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" * Marks the task as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-20"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-20"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" * Marks the task as not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" public void unMarkAsDone() {","lastModifiedDate":"2024-01-20"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-20"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the task,","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" * including its type, completion status, and description.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" return \"[T]\" + (isDone ? \"[X] \" : \"[ ] \") + description;","lastModifiedDate":"2024-01-20"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the task formatted for file storage,","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" * including its type, completion status, and description.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" * @return A string formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" public String toFileString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" return \"T\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" * Returns a Task instance from the string representation of the task stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" * @param str The string representation of the task stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" * @return The Task instance from the string representation of the task stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" public static Task fromFileString(String str) {","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d str.split(\" \\\\| \");","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" if (!parts[0].equals(\"T\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" return null;","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" Task task \u003d new Task(description);","lastModifiedDate":"2024-01-25"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" if (isDone) {","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" return task;","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Bandov":94}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" * The TaskList class represents a list of tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * It encapsulates an ArrayList of Task objects and","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" * provides methods to manipulate the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"public class TaskList {","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" * Constructs a TaskList with the specified list of tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * @param list An ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" this.list \u003d list;","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" public TaskList() {","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" * Adds a task to the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" * @param task The Task object to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" public void add(Task task) {","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" public void remove(int index) {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" list.remove(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" * Retrieves a task from the task list at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" * @return The Task object at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" public Task get(int index) {","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" return list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" * @return The size of the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" public int size() {","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" return list.size();","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" * Returns the ArrayList containing all the tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" return list;","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" * Finds all tasks in the task list that contain the specified keyword.","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" * @return An ArrayList of Task objects that contain the keyword.","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" public ArrayList\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" for (Task task : list) {","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" matchingTasks.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" return matchingTasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":97,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":98,"author":{"gitId":"Bandov"},"content":" return list.toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":99,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":100,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":100}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" * The Ui class is responsible for handling user interactions.","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * It provides methods to display messages to the user and parse user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"public class Ui {","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" Scanner scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" * Constructs a Ui object, initializing a scanner to read user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" public Ui() {","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * Prints one or more messages to the console, each separated by a line.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" * @param messages An array of messages to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" public static void printWithLines(String... messages) {","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" System.out.println(\"------------------------------------------\");","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" for (String message : messages) {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" * Displays an error message when there is an error loading the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" public static void showLoadingError() {","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" printWithLines(\"Error loading file\");","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * Parses and processes the user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" * It delegates the command handling to the Parser class.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" * @param list The TaskList to be used for executing commands.","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" public static void parse(TaskList list, String message) {","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" if (message.startsWith(\"todo\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" Parser.handleTodo(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"deadline\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" Parser.handleDeadline(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"event\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" Parser.handleEvent(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" } else if (message.equals(\"list\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" Parser.handleList(list);","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"mark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" Parser.handleMark(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"unmark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" Parser.handleUnmark(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"delete\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" Parser.deleteTask(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"find\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" Parser.findTask(list, message);","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" } else if (!message.equals(\"bye\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":71}},{"path":"src/main/java/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" mkdir ../bin","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"# delete output from previous run","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"if ! javac -Xlint:none -d ../bin /Users/dom/ip/src/main/java/duke/Duke.java","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" exit 1","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":"java Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":"# compare the output to the expected output","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" exit 0","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":"else","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" exit 1","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Bandov":35}},{"path":"src/test/java/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"import duke.*;","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.function.Executable;","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"class ParserTest {","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" private TaskList list;","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" @BeforeEach","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" void setUp() {","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" list \u003d new TaskList();","lastModifiedDate":"2024-01-26"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" // Mocking Ui methods or ensure that Ui methods can run in a test environment","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" void handleTodo_validInput_addsTodo() {","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" Parser.handleTodo(list, \"todo read book\");","lastModifiedDate":"2024-01-26"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" Task addedTask \u003d list.get(0);","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", addedTask.getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" fail(\"Exception should not be thrown for valid input\");","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" void handleTodo_emptyDescription_throwsDukeException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" Executable todoWithEmptyDescription \u003d () -\u003e Parser.handleTodo(list, \"todo\");","lastModifiedDate":"2024-01-26"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" assertThrows(DukeException.class, todoWithEmptyDescription, \"Exception was expected for empty todo description\");","lastModifiedDate":"2024-01-26"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" void handleTodo_validInput_addsDeadline() {","lastModifiedDate":"2024-01-26"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" Parser.handleDeadline(list, \"deadline read book /by 2020-02-02\");","lastModifiedDate":"2024-01-26"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" Deadline addedTask \u003d (Deadline) list.get(0);","lastModifiedDate":"2024-01-26"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", addedTask.getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" assertEquals(\"2020-02-02\", addedTask.getDate());","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" fail(\"Exception should not be thrown for valid input\");","lastModifiedDate":"2024-01-26"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" void handleDeadline_emptyDescription_throwsDukeException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" Executable todoWithEmptyDescription \u003d () -\u003e Parser.handleDeadline(list, \"deadline\");","lastModifiedDate":"2024-01-26"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" assertThrows(DukeException.class, todoWithEmptyDescription, \"Exception was expected for empty todo description\");","lastModifiedDate":"2024-01-26"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" void handleTodo_validInput_addsEvent() {","lastModifiedDate":"2024-01-26"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" Parser.handleEvent(list, \"event read book /from 2020-02-02 23:00 /to 2020-02-03 23:15\");","lastModifiedDate":"2024-01-26"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" Event addedTask \u003d (Event) list.get(0);","lastModifiedDate":"2024-01-26"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", addedTask.getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" assertEquals(\"2020-02-02T23:00\", addedTask.getFromDate());","lastModifiedDate":"2024-01-26"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" assertEquals(\"2020-02-03T23:15\", addedTask.getToDate());","lastModifiedDate":"2024-01-26"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" fail(\"Exception should not be thrown for valid input\");","lastModifiedDate":"2024-01-26"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" void handleEvent_emptyDescription_throwsDukeException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" Executable todoWithEmptyDescription \u003d () -\u003e Parser.handleDeadline(list, \"event\");","lastModifiedDate":"2024-01-26"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" assertThrows(DukeException.class, todoWithEmptyDescription, \"Exception was expected for empty todo description\");","lastModifiedDate":"2024-01-26"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Bandov":73}},{"path":"src/test/java/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"import duke.DukeException;","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"import duke.Storage;","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import duke.Task;","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import duke.TaskList;","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"import java.nio.file.Files;","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"import java.nio.file.Path;","lastModifiedDate":"2024-01-26"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2024-01-26"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"class StorageTest {","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" private Path tempFile;","lastModifiedDate":"2024-01-26"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" private Storage storage;","lastModifiedDate":"2024-01-26"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" @BeforeEach","lastModifiedDate":"2024-01-26"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" void setUp() throws IOException, DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" // Create a temporary file","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" tempFile \u003d Files.createTempFile(\"test\", \".txt\");","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" // Initialize Storage with the temporary file path","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" storage \u003d new Storage(tempFile.toString());","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" @AfterEach","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" void tearDown() throws IOException {","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" // Delete the temporary file after each test","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" Files.deleteIfExists(tempFile);","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" void saveAndLoad_TodoTask() throws IOException, DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2024-01-26"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" list.add(new Task(\"read book\")); // Assuming Task is a valid type for simplicity","lastModifiedDate":"2024-01-26"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" // Save the list to the file","lastModifiedDate":"2024-01-26"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" Storage.saveCurrentList(list);","lastModifiedDate":"2024-01-26"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" // Load the list back","lastModifiedDate":"2024-01-26"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e loadedList \u003d storage.load();","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" // Check if the loaded list matches the saved list","lastModifiedDate":"2024-01-26"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" assertEquals(1, loadedList.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", loadedList.get(0).getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-26"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Bandov":50}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"import duke.Task;","lastModifiedDate":"2024-01-26"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import duke.TaskList;","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"public class TaskListTest {","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" @BeforeEach","lastModifiedDate":"2024-01-26"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" void setUp() {","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" void testAddTask() {","lastModifiedDate":"2024-01-26"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" Task task \u003d new Task(\"Read book\");","lastModifiedDate":"2024-01-26"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Bandov":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"todo Read a book","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"deadline Submit assignment /by 2024-01-30","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"event Team meeting /from 2024-01-25 10:00 /to 2024-01-25 12:00","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"todo","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"deadline Finish project","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"event Conference /from 2024-01-28","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"mark 100","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"unmark 100","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"unmark","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"dance","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"todo Complete Java project","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"deadline File taxes /by 2024-04-15","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"event Birthday Party /from 2024-03-10 18:00 /to 2024-03-10 22:00","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"mark 2","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":"unmark 2","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"deadline Prepare presentation /by 2024-03-05","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"event Workshop /from 2024-02-20 09:00 /to 2024-02-20 12:00","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":"todo Clean the house","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":"delete 1","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":"delete 3","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":"delete 100","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"delete","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":"todo Grocery Shopping","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"todo Call Mom","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":"deadline Renew Insurance /by 2024-05-01","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":"event Doctor\u0027s Appointment /from 2024-04-20 15:00 /to 2024-04-20 16:00","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":"mark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":"mark 5","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":"unmark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Bandov":35}},{"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":"Bandov"},"content":"if ! javac -Xlint:none -d ../bin /Users/dom/ip/src/main/java/*.java","lastModifiedDate":"2024-01-24"},{"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":"Bandov"},"content":"java -cp ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Bandov":4,"-":31}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"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":"Bandov"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"checkstyle {","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" toolVersion \u003d \"10.2\"","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"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":"Bandov"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2024-01-26"},{"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":"Bandov"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2024-01-26"},{"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":{"Bandov":7,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" * The Deadline class represents a task with a deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * It is a subclass of the Task class.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" protected LocalDate by;","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" * Constructor for Deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-20"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" * @return The string representation of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" return \"[D]\" + (isDone ? \"[X] \" : \"[ ] \") + super.description + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-20"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" * Returns the string representation of the deadline to be stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * @return The string representation of the deadline to be stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" public String toFileString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" return \"D\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + by;","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" * Returns a Deadline instance from the string representation of the deadline stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" * @param str The string representation of the deadline stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" * @return The Deadline instance from the string representation of the deadline stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" public static Deadline fromFileString(String str) {","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d str.split(\" \\\\| \");","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" if (!parts[0].equals(\"D\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" return null;","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" LocalDate by \u003d LocalDate.parse(parts[3].trim());","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" if (isDone) {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" deadline.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" return deadline;","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" * Returns the date of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" * @return The date of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" public String getDate() {","lastModifiedDate":"2024-01-26"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" return by.toString();","lastModifiedDate":"2024-01-26"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Bandov":73}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" * The Duke class is the main class of the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" * It is responsible for the initialization of the Storage and TaskList instances.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" * It also contains the main method that serves as the entry point for the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"public class Duke {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" private static TaskList tasks;","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" private Storage storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" * Constructor for Duke.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" * Initializes the Storage and TaskList instances.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" * @param filePath The path to the file where the task list is stored.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If an error occurs while loading the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" public Duke(String filePath) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" Ui.showLoadingError();","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" * The main method that serves as the entry point for the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" * Initializes the Duke instance and processes the user input until the \"bye\" command is given.","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" * @param args Command line arguments (not used).","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" Duke duke \u003d new Duke(\"./data/duke.txt\");","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" Ui.showLoadingError();","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Hello! I\u0027m Bob!\", \"What can I do for you?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" while (isRunning) {","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" String message \u003d scanner.nextLine();","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" Ui.parse(tasks, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" isRunning \u003d !message.equals(\"bye\");","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" Storage.saveCurrentList(tasks);","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" System.out.println(\"------------------------------------------\");","lastModifiedDate":"2024-01-20"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Bandov":63,"-":1}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":" * The DukeException class represents an exception specific to the Duke application.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" * Constructor for DukeException.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" * @param message The error message.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" public DukeException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Bandov":16}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * Represents an event task with a description, start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" * It extends the Task class by adding time-specific information.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" protected LocalDateTime from;","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" protected LocalDateTime to;","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * Constructs an Event task with the specified description, start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" * @param description The description of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" * @param from The start time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * @param to The end time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-20"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-20"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the event task, including its type, status, description, and timing.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" return \"[E]\" + (isDone ? \"[X] \" : \"[ ] \") + super.description + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2024-01-20"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the event task formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" * @return A string formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" public String toFileString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" return \"E\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + from + \" - \" + to;","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" * Creates an Event object from a string representation formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" * @param str The string representation of the event from a file.","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" * @return An Event object, or null if the string format is invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" public static Event fromFileString(String str) {","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d str.split(\" \\\\| \");","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" if (!parts[0].equals(\"E\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" return null; // or throw an exception","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" String[] times \u003d parts[3].split(\" - \");","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" if (times.length \u003c 2) {","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" return null;","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" String from \u003d times[0].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" String to \u003d times[1].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm\");","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeFrom \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeTo \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" Event event \u003d new Event(description, dateTimeFrom, dateTimeTo);","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" if (isDone) {","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" event.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" return event;","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" * Returns the start time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the start time.","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" public String getFromDate() {","lastModifiedDate":"2024-01-26"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" return from.toString();","lastModifiedDate":"2024-01-26"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" * Returns the end time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" public String getToDate() {","lastModifiedDate":"2024-01-26"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" return to.toString();","lastModifiedDate":"2024-01-26"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Bandov":94}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" * The Parser class represents a parser that parses the user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"public class Parser {","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" * Parses the user input for a \"todo\" command and adds a new Todo task to the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * It throws an exception if the input does not contain a description for the todo.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" * @param list The TaskList to which the new todo task is added.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the todo description is empty.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" public static void handleTodo(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"todo\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" String description \u003d message.substring(5).trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" Task task \u003d new Task(description);","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Got it. I\u0027ve added this task:\", task.toString(),","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" \"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"deadline\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" * Adds a deadline task to the task list with a specified due date.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * @param list The task list to add the deadline to.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the deadline or its date/time format is incorrect.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" public static void handleDeadline(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d message.split(\"/by\", 2);","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The deadline date/time is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" LocalDate date \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" Deadline task \u003d new Deadline(description, date);","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Got it. I\u0027ve added this task:\", task.toString(),","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" \"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The deadline date format is incorrect. Please use yyyy-MM-dd format.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"event\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" * Adds an event task to the task list with specified start and end times.","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" * @param list The task list to add the event to.","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the event time is missing or the date/time format is incorrect.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" public static void handleEvent(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d message.split(\" /from \", 2);","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" if (parts.length \u003c 2 || !parts[1].contains(\" /to \")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The event time is missing or incomplete buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[0].substring(6).trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" String[] timeParts \u003d parts[1].split(\" /to \", 2);","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" String fromTime \u003d timeParts[0].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" String toTime \u003d timeParts[1].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2024-01-25"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeFrom \u003d LocalDateTime.parse(fromTime, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" LocalDateTime dateTimeTo \u003d LocalDateTime.parse(toTime, formatter);","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" Event task \u003d new Event(description, dateTimeFrom, dateTimeTo);","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Got it. I\u0027ve added this task:\", task.toString(),","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" \"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The deadline date format is incorrect. \"","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" + \"Please use yyyy-MM-dd HH:mm format.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":" * Handles the \"list\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":" * Displays all tasks in the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"Bandov"},"content":" * @param list The task list to display.","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"Bandov"},"content":" public static void handleList(TaskList list) {","lastModifiedDate":"2024-01-25"},{"lineNumber":99,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cString\u003e taskDescriptions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-25"},{"lineNumber":100,"author":{"gitId":"Bandov"},"content":" taskDescriptions.add(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-25"},{"lineNumber":101,"author":{"gitId":"Bandov"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2024-01-25"},{"lineNumber":102,"author":{"gitId":"Bandov"},"content":" taskDescriptions.add((i + 1) + \". \" + list.get(i).toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":103,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":104,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(taskDescriptions.toArray(new String[0]));","lastModifiedDate":"2024-01-25"},{"lineNumber":105,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":106,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":107,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"mark\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"Bandov"},"content":" * Marks a task as done based on the specified task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"Bandov"},"content":" * @param list The task list containing the task to be marked.","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the task number is missing or invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"Bandov"},"content":" public static void handleMark(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":116,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"mark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":117,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The task number is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":118,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":119,"author":{"gitId":"Bandov"},"content":" int index \u003d Integer.parseInt(message.substring(5).trim()) - 1;","lastModifiedDate":"2024-01-25"},{"lineNumber":120,"author":{"gitId":"Bandov"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":121,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! Task number is invalid buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":122,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":123,"author":{"gitId":"Bandov"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":124,"author":{"gitId":"Bandov"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-25"},{"lineNumber":125,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Nice! I\u0027ve marked this task as done:\", task.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":126,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":127,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":128,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"unmark\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"Bandov"},"content":" * Marks a task as not done based on the specified task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"Bandov"},"content":" * @param list The task list containing the task to be unmarked.","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the task number is missing or invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"Bandov"},"content":" public static void handleUnmark(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":137,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"unmark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":138,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The task number is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":139,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":140,"author":{"gitId":"Bandov"},"content":" int index \u003d Integer.parseInt(message.substring(7).trim()) - 1;","lastModifiedDate":"2024-01-25"},{"lineNumber":141,"author":{"gitId":"Bandov"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":142,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! Task number is invalid buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":143,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":144,"author":{"gitId":"Bandov"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":145,"author":{"gitId":"Bandov"},"content":" task.unMarkAsDone();","lastModifiedDate":"2024-01-25"},{"lineNumber":146,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"OK, I\u0027ve marked this task as not done yet:\", task.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":147,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":148,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":149,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":150,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"delete\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":151,"author":{"gitId":"Bandov"},"content":" * Deletes a task from the task list based on the specified task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":152,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":153,"author":{"gitId":"Bandov"},"content":" * @param list The task list from which to delete the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":154,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":155,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the task number is missing or invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":156,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":157,"author":{"gitId":"Bandov"},"content":" public static void deleteTask(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":158,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"delete\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":159,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The task number is missing buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":160,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":161,"author":{"gitId":"Bandov"},"content":" int index \u003d Integer.parseInt(message.substring(7).trim()) - 1;","lastModifiedDate":"2024-01-25"},{"lineNumber":162,"author":{"gitId":"Bandov"},"content":" if (index \u003c 0 || index \u003e\u003d list.size()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":163,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! Task number is invalid buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":164,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":165,"author":{"gitId":"Bandov"},"content":" Task task \u003d list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":166,"author":{"gitId":"Bandov"},"content":" list.remove(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":167,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"OK, I\u0027ve deleted this task:\", task.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":168,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":169,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":170,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":171,"author":{"gitId":"Bandov"},"content":" * Parses and handles the \"find\" command.","lastModifiedDate":"2024-01-27"},{"lineNumber":172,"author":{"gitId":"Bandov"},"content":" * Finds all tasks in the task list that contain the specified keyword.","lastModifiedDate":"2024-01-27"},{"lineNumber":173,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":174,"author":{"gitId":"Bandov"},"content":" * @param list The task list to search for matching tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":175,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":176,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the keyword is missing.","lastModifiedDate":"2024-01-27"},{"lineNumber":177,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":178,"author":{"gitId":"Bandov"},"content":" public static void findTask(TaskList list, String message) throws DukeException {","lastModifiedDate":"2024-01-27"},{"lineNumber":179,"author":{"gitId":"Bandov"},"content":" if (message.trim().equals(\"find\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":180,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! The keyword is missing buddy.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":181,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":182,"author":{"gitId":"Bandov"},"content":" String keyword \u003d message.substring(5).trim();","lastModifiedDate":"2024-01-27"},{"lineNumber":183,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d list.find(keyword);","lastModifiedDate":"2024-01-27"},{"lineNumber":184,"author":{"gitId":"Bandov"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":185,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"No matching task found.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":186,"author":{"gitId":"Bandov"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":187,"author":{"gitId":"Bandov"},"content":" Ui.printWithLines(\"Here is the matching tasks in your list: \");","lastModifiedDate":"2024-01-27"},{"lineNumber":188,"author":{"gitId":"Bandov"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":189,"author":{"gitId":"Bandov"},"content":" System.out.println((i + 1) + \". \" + matchingTasks.get(i).toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":190,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":191,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":192,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":193,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":193}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.io.File;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" * The Storage class is responsible for handling file operations including","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" * loading tasks from a file and saving tasks to a file.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"public class Storage {","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" protected static String filePath;","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" protected Scanner scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" protected File file;","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * Creates a Storage object which initializes a Scanner for reading from a file.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" * The file path is specified by the provided string.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" * @param filePath The file path of the storage file.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If the file is not found.","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" public Storage(String filePath) throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" Storage.filePath \u003d filePath;","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" this.scanner \u003d new Scanner(file);","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"Error loading file\");","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" * Writes the given text to a file at the specified file path.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * @param filePath The file path where the text is to be written.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" * @param textToAdd The text to write to the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" * @throws IOException If an I/O error occurs.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" private static void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" fw.write(textToAdd);","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" fw.close();","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" * Saves the current list of tasks to the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" * @param list The task list to be saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" * @throws IOException If an I/O error occurs during writing.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" public static void saveCurrentList(TaskList list) throws IOException {","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" for (Task task : list.getList()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" sb.append(task.toFileString());","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" sb.append(\"\\n\");","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" writeToFile(filePath, sb.toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" * Loads tasks from the file and returns them as an ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" * @throws DukeException If an error occurs while reading from the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" while (scanner.hasNext()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" switch (type) {","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" case \"T\":","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" list.add(Task.fromFileString(line));","lastModifiedDate":"2024-01-25"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" case \"D\":","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" list.add(Deadline.fromFileString(line));","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" case \"E\":","lastModifiedDate":"2024-01-25"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" list.add(Event.fromFileString(line));","lastModifiedDate":"2024-01-25"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"Error loading file\");","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" return list;","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":93}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":" * Represents a task with a description and a completion status.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":" * This class serves as the base class for more specific types of tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"public class Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" protected String description;","lastModifiedDate":"2024-01-20"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" * Constructs a Task with the specified description. The task is initially not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-20"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-20"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-20"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" * Returns the description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" * @return The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-20"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" return description;","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" * Returns the completion status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" * @return true if the task is done, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" public boolean isDone() {","lastModifiedDate":"2024-01-20"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" return isDone;","lastModifiedDate":"2024-01-20"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" * Marks the task as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-20"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-20"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" * Marks the task as not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" public void unMarkAsDone() {","lastModifiedDate":"2024-01-20"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-20"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the task,","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" * including its type, completion status, and description.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" return \"[T]\" + (isDone ? \"[X] \" : \"[ ] \") + description;","lastModifiedDate":"2024-01-20"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the task formatted for file storage,","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" * including its type, completion status, and description.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" * @return A string formatted for file storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" public String toFileString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" return \"T\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" * Returns a Task instance from the string representation of the task stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" * @param str The string representation of the task stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" * @return The Task instance from the string representation of the task stored in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" public static Task fromFileString(String str) {","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" String[] parts \u003d str.split(\" \\\\| \");","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" if (!parts[0].equals(\"T\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" return null;","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" String description \u003d parts[2].trim();","lastModifiedDate":"2024-01-25"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" boolean isDone \u003d parts[1].trim().equals(\"1\");","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" Task task \u003d new Task(description);","lastModifiedDate":"2024-01-25"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" if (isDone) {","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" return task;","lastModifiedDate":"2024-01-25"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Bandov":94}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" * The TaskList class represents a list of tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * It encapsulates an ArrayList of Task objects and","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" * provides methods to manipulate the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"public class TaskList {","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" private ArrayList\u003cTask\u003e list;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" * Constructs a TaskList with the specified list of tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" * @param list An ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" this.list \u003d list;","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" public TaskList() {","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" * Adds a task to the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" * @param task The Task object to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" public void add(Task task) {","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" list.add(task);","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" public void remove(int index) {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" list.remove(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" * Retrieves a task from the task list at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" * @return The Task object at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" public Task get(int index) {","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" return list.get(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" * @return The size of the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" public int size() {","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" return list.size();","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" * Returns the ArrayList containing all the tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" return list;","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" * Finds all tasks in the task list that contain the specified keyword.","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" * @return An ArrayList of Task objects that contain the keyword.","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" public ArrayList\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" for (Task task : list) {","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"Bandov"},"content":" matchingTasks.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"Bandov"},"content":" return matchingTasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"Bandov"},"content":" * Returns a string representation of the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"Bandov"},"content":" * @return A string representation of the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"Bandov"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":97,"author":{"gitId":"Bandov"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":98,"author":{"gitId":"Bandov"},"content":" return list.toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":99,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":100,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":100}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"package duke;","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" * The Ui class is responsible for handling user interactions.","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":" * It provides methods to display messages to the user and parse user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"public class Ui {","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":" private Scanner scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" * Constructs a Ui object, initializing a scanner to read user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":" public Ui() {","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" * Prints one or more messages to the console, each separated by a line.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" * @param messages An array of messages to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" public static void printWithLines(String... messages) {","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" System.out.println(\"------------------------------------------\");","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" for (String message : messages) {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" * Displays an error message when there is an error loading the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" public static void showLoadingError() {","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" printWithLines(\"Error loading file\");","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" * Parses and processes the user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" * It delegates the command handling to the Parser class.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" * @param list The TaskList to be used for executing commands.","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" * @param message The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" public static void parse(TaskList list, String message) {","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" if (message.startsWith(\"todo\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" Parser.handleTodo(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"deadline\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" Parser.handleDeadline(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"event\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" Parser.handleEvent(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" } else if (message.equals(\"list\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" Parser.handleList(list);","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"mark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":" Parser.handleMark(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"unmark\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" Parser.handleUnmark(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"delete\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" Parser.deleteTask(list, message);","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" } else if (message.startsWith(\"find\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" Parser.findTask(list, message);","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":" } else if (!message.equals(\"bye\")) {","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means buddy.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" printWithLines(e.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Bandov":71}},{"path":"src/main/java/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":" mkdir ../bin","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"# delete output from previous run","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"if ! javac -Xlint:none -d ../bin /Users/dom/ip/src/main/java/duke/Duke.java","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" exit 1","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":"java Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":"# compare the output to the expected output","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"then","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" exit 0","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":"else","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" exit 1","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":"fi","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Bandov":35}},{"path":"src/test/java/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.function.Executable;","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"import duke.Deadline;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"import duke.DukeException;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"import duke.Event;","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"import duke.Parser;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"import duke.Task;","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"import duke.TaskList;","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"class ParserTest {","lastModifiedDate":"2024-01-26"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" private TaskList list;","lastModifiedDate":"2024-01-26"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" @BeforeEach","lastModifiedDate":"2024-01-26"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" void setUp() {","lastModifiedDate":"2024-01-26"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" list \u003d new TaskList();","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" // Mocking Ui methods or ensure that Ui methods can run in a test environment","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" void handleTodo_validInput_addsTodo() {","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":" Parser.handleTodo(list, \"todo read book\");","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" Task addedTask \u003d list.get(0);","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", addedTask.getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" fail(\"Exception should not be thrown for valid input\");","lastModifiedDate":"2024-01-26"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" void handleTodo_emptyDescription_throwsDukeException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":" Executable todoWithEmptyDescription \u003d () -\u003e Parser.handleTodo(list, \"todo\");","lastModifiedDate":"2024-01-26"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" assertThrows(DukeException.class, todoWithEmptyDescription,","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" \"Exception was expected for empty todo description\");","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":" void handleTodo_validInput_addsDeadline() {","lastModifiedDate":"2024-01-26"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" Parser.handleDeadline(list, \"deadline read book /by 2020-02-02\");","lastModifiedDate":"2024-01-26"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" Deadline addedTask \u003d (Deadline) list.get(0);","lastModifiedDate":"2024-01-26"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", addedTask.getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":" assertEquals(\"2020-02-02\", addedTask.getDate());","lastModifiedDate":"2024-01-26"},{"lineNumber":52,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":53,"author":{"gitId":"Bandov"},"content":" fail(\"Exception should not be thrown for valid input\");","lastModifiedDate":"2024-01-26"},{"lineNumber":54,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":55,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":56,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":57,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":58,"author":{"gitId":"Bandov"},"content":" void handleDeadline_emptyDescription_throwsDukeException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":59,"author":{"gitId":"Bandov"},"content":" Executable todoWithEmptyDescription \u003d () -\u003e Parser.handleDeadline(list, \"deadline\");","lastModifiedDate":"2024-01-26"},{"lineNumber":60,"author":{"gitId":"Bandov"},"content":" assertThrows(DukeException.class, todoWithEmptyDescription,","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Bandov"},"content":" \"Exception was expected for empty todo description\");","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":63,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":64,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":65,"author":{"gitId":"Bandov"},"content":" void handleTodo_validInput_addsEvent() {","lastModifiedDate":"2024-01-26"},{"lineNumber":66,"author":{"gitId":"Bandov"},"content":" try {","lastModifiedDate":"2024-01-26"},{"lineNumber":67,"author":{"gitId":"Bandov"},"content":" Parser.handleEvent(list, \"event read book /from 2020-02-02 23:00 /to 2020-02-03 23:15\");","lastModifiedDate":"2024-01-26"},{"lineNumber":68,"author":{"gitId":"Bandov"},"content":" assertEquals(1, list.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":69,"author":{"gitId":"Bandov"},"content":" Event addedTask \u003d (Event) list.get(0);","lastModifiedDate":"2024-01-26"},{"lineNumber":70,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", addedTask.getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":71,"author":{"gitId":"Bandov"},"content":" assertEquals(\"2020-02-02T23:00\", addedTask.getFromDate());","lastModifiedDate":"2024-01-26"},{"lineNumber":72,"author":{"gitId":"Bandov"},"content":" assertEquals(\"2020-02-03T23:15\", addedTask.getToDate());","lastModifiedDate":"2024-01-26"},{"lineNumber":73,"author":{"gitId":"Bandov"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-26"},{"lineNumber":74,"author":{"gitId":"Bandov"},"content":" fail(\"Exception should not be thrown for valid input\");","lastModifiedDate":"2024-01-26"},{"lineNumber":75,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":76,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":77,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":78,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":79,"author":{"gitId":"Bandov"},"content":" void handleEvent_emptyDescription_throwsDukeException() {","lastModifiedDate":"2024-01-26"},{"lineNumber":80,"author":{"gitId":"Bandov"},"content":" Executable todoWithEmptyDescription \u003d () -\u003e Parser.handleDeadline(list, \"event\");","lastModifiedDate":"2024-01-26"},{"lineNumber":81,"author":{"gitId":"Bandov"},"content":" assertThrows(DukeException.class, todoWithEmptyDescription,","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"Bandov"},"content":" \"Exception was expected for empty todo description\");","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":84,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Bandov":84}},{"path":"src/test/java/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import java.nio.file.Files;","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"import java.nio.file.Path;","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-26"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"import duke.DukeException;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"import duke.Storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"import duke.Task;","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"import duke.TaskList;","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"class StorageTest {","lastModifiedDate":"2024-01-26"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" private Path tempFile;","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" private Storage storage;","lastModifiedDate":"2024-01-26"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" @BeforeEach","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":" void setUp() throws IOException, DukeException {","lastModifiedDate":"2024-01-26"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":" // Create a temporary file","lastModifiedDate":"2024-01-26"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":" tempFile \u003d Files.createTempFile(\"test\", \".txt\");","lastModifiedDate":"2024-01-26"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":" // Initialize Storage with the temporary file path","lastModifiedDate":"2024-01-26"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":" storage \u003d new Storage(tempFile.toString());","lastModifiedDate":"2024-01-26"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":" @AfterEach","lastModifiedDate":"2024-01-26"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":" void tearDown() throws IOException {","lastModifiedDate":"2024-01-26"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":" // Delete the temporary file after each test","lastModifiedDate":"2024-01-26"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":" Files.deleteIfExists(tempFile);","lastModifiedDate":"2024-01-26"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":36,"author":{"gitId":"Bandov"},"content":" void saveAndLoadTodoTask() throws IOException, DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Bandov"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2024-01-26"},{"lineNumber":38,"author":{"gitId":"Bandov"},"content":" list.add(new Task(\"read book\")); // Assuming Task is a valid type for simplicity","lastModifiedDate":"2024-01-26"},{"lineNumber":39,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":40,"author":{"gitId":"Bandov"},"content":" // Save the list to the file","lastModifiedDate":"2024-01-26"},{"lineNumber":41,"author":{"gitId":"Bandov"},"content":" Storage.saveCurrentList(list);","lastModifiedDate":"2024-01-26"},{"lineNumber":42,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":43,"author":{"gitId":"Bandov"},"content":" // Load the list back","lastModifiedDate":"2024-01-26"},{"lineNumber":44,"author":{"gitId":"Bandov"},"content":" ArrayList\u003cTask\u003e loadedList \u003d storage.load();","lastModifiedDate":"2024-01-26"},{"lineNumber":45,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":46,"author":{"gitId":"Bandov"},"content":" // Check if the loaded list matches the saved list","lastModifiedDate":"2024-01-26"},{"lineNumber":47,"author":{"gitId":"Bandov"},"content":" assertEquals(1, loadedList.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":48,"author":{"gitId":"Bandov"},"content":" assertEquals(\"read book\", loadedList.get(0).getDescription());","lastModifiedDate":"2024-01-26"},{"lineNumber":49,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":50,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":51,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Bandov":51}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-26"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2024-01-26"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-26"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"import duke.Task;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"import duke.TaskList;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"public class TaskListTest {","lastModifiedDate":"2024-01-26"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-26"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":" @BeforeEach","lastModifiedDate":"2024-01-26"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":" void setUp() {","lastModifiedDate":"2024-01-26"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-26"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-26"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":" @Test","lastModifiedDate":"2024-01-26"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":" void testAddTask() {","lastModifiedDate":"2024-01-26"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":" Task task \u003d new Task(\"Read book\");","lastModifiedDate":"2024-01-26"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-26"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2024-01-26"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":" }","lastModifiedDate":"2024-01-26"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":"}","lastModifiedDate":"2024-01-26"}],"authorContributionMap":{"Bandov":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Bandov"},"content":"todo Read a book","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Bandov"},"content":"deadline Submit assignment /by 2024-01-30","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Bandov"},"content":"event Team meeting /from 2024-01-25 10:00 /to 2024-01-25 12:00","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Bandov"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Bandov"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Bandov"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Bandov"},"content":"todo","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Bandov"},"content":"deadline Finish project","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Bandov"},"content":"event Conference /from 2024-01-28","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Bandov"},"content":"mark 100","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Bandov"},"content":"unmark 100","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Bandov"},"content":"unmark","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"Bandov"},"content":"dance","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"Bandov"},"content":"todo Complete Java project","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"Bandov"},"content":"deadline File taxes /by 2024-04-15","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Bandov"},"content":"event Birthday Party /from 2024-03-10 18:00 /to 2024-03-10 22:00","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"Bandov"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Bandov"},"content":"mark 2","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Bandov"},"content":"unmark 2","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Bandov"},"content":"deadline Prepare presentation /by 2024-03-05","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Bandov"},"content":"event Workshop /from 2024-02-20 09:00 /to 2024-02-20 12:00","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Bandov"},"content":"todo Clean the house","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Bandov"},"content":"delete 1","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Bandov"},"content":"delete 3","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Bandov"},"content":"delete 100","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"delete","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"Bandov"},"content":"todo Grocery Shopping","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Bandov"},"content":"todo Call Mom","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"Bandov"},"content":"deadline Renew Insurance /by 2024-05-01","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"Bandov"},"content":"event Doctor\u0027s Appointment /from 2024-04-20 15:00 /to 2024-04-20 16:00","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"Bandov"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"Bandov"},"content":"mark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"Bandov"},"content":"mark 5","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"Bandov"},"content":"unmark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Bandov":35}},{"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":"Bandov"},"content":"if ! javac -Xlint:none -d ../bin /Users/dom/ip/src/main/java/*.java","lastModifiedDate":"2024-01-24"},{"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":"Bandov"},"content":"java -cp ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"Bandov"},"content":"diff ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Bandov"},"content":"","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Bandov":4,"-":31}}] diff --git a/Bandov_ip_master/commits.json b/Bandov_ip_master/commits.json index 7a91cffe..497ad705 100644 --- a/Bandov_ip_master/commits.json +++ b/Bandov_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Bandov":[{"date":"2024-01-20","commitResults":[{"hash":"d939adc145f25fee22667cef2ae516e5d55e0dca","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"dd5d0b4f0bee7a29eab8bdcb3048322af6eed788","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"1fa5b091ef40551faed487252bc4a6247d15f335","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"7ea9a42b8613d90a6d2d65d045acaddf8ddcf3c5","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":7}}},{"hash":"413d537eac2b2a2882d7b248ce4f0d8b27154762","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":36}}},{"hash":"eba8bbc136546a09580c24c60f48e2a2a6f93ea5","isMergeCommit":false,"messageTitle":"fixed double lining","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-22","commitResults":[{"hash":"3965a0c45171cd863925c3e37e0195a210e8333c","isMergeCommit":false,"messageTitle":"Added error catching functionality","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":49}}},{"hash":"36865521f1d995737e8019d3c09dcb17f39599c3","isMergeCommit":false,"messageTitle":"deleting of tasks from task list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2024-01-24","commitResults":[{"hash":"412f760d56a2cc994b396706e0930108f8b4f921","isMergeCommit":false,"messageTitle":"Add the autorunning of tests","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":35,"deletions":0}}},{"hash":"64174a43ea5b15682ac1dd81618539f17e9e4c4d","isMergeCommit":false,"messageTitle":"correct testing methodology","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":35,"deletions":0},"sh":{"insertions":5,"deletions":8}}}]},{"date":"2024-01-25","commitResults":[{"hash":"ff165f0efb8aa20279176104c86114513a1898c7","isMergeCommit":false,"messageTitle":"added saving","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":4}}},{"hash":"c811695f16030aaa41af03d2952a318064c8fce5","isMergeCommit":false,"messageTitle":"added time functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":13}}},{"hash":"8a6cf9e4beb4cf8fec44ae36d470c96607f02909","isMergeCommit":false,"messageTitle":"OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":272,"deletions":185}}},{"hash":"4478a954777931fd1fd77ec1f2113f72d29066f3","isMergeCommit":false,"messageTitle":"added to package duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-26","commitResults":[{"hash":"1379e3307de176da605b8a99bf2597e80a415471","isMergeCommit":true,"messageTitle":"Merge commit \u0027a6f73244a20539e20c2189973ebf597df34ef631\u0027 into A-Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"52aa6682b94a6380ce7eeaf2c9109d285b64c8b8","isMergeCommit":false,"messageTitle":"Added gradle testing and functionality","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":73,"deletions":0}}},{"hash":"d4feed0adddf5bbc883646054c1dce2315873f0a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Packages","A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"8e306b2824bc9526df886a0b189bd9129111259d","isMergeCommit":false,"messageTitle":"Added more JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":0}}},{"hash":"617d11991d293964e69a49215390bf20aa8bccd7","isMergeCommit":false,"messageTitle":"Jar file creation","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2024-01-27","commitResults":[{"hash":"0f6233802a04de9ffc20ee654356bdf14fde4970","isMergeCommit":false,"messageTitle":"gradle checkstyle plus javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":11,"deletions":0},"java":{"insertions":294,"deletions":1}}},{"hash":"3436a90f145e1ebdbee3d0930fa1b59e05c40193","isMergeCommit":false,"messageTitle":"coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":31,"deletions":16}}},{"hash":"4b4e97813ca03afcc541ff621eddd2c88671e8d5","isMergeCommit":false,"messageTitle":"added find capability","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"5c15a053dc46dda43959f2cd52f82b7b9ed0f5d2","isMergeCommit":false,"messageTitle":"changed indentation to follow checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}}]},{"date":"2024-01-29","commitResults":[{"hash":"e7485a33153f814dddfc4cdd82dfef9d3e4ab8a3","isMergeCommit":false,"messageTitle":"fix wrong branching","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"1b361110f07265935271189ad111348123ef5107","isMergeCommit":true,"messageTitle":"Merge commit \u0027e7485a33153f814dddfc4cdd82dfef9d3e4ab8a3\u0027 into branch-Level-8","messageBody":"* commit \u0027e7485a33153f814dddfc4cdd82dfef9d3e4ab8a3\u0027:\n fix wrong branching\n","fileTypesAndContributionMap":{}},{"hash":"219a8459f416f419b8a73422e0b010a776dcdea9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n fix wrong branching\n\n# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Bandov":{"java":940,"md":0,"fxml":0,"sh":39,"bat":0,"gradle":13,"txt":35}},"authorContributionVariance":{"Bandov":40479.42},"authorDisplayNameMap":{"Bandov":"CS2103T-T11-1 SONG..INIC"}} +{"authorDailyContributionsMap":{"Bandov":[{"date":"2024-01-20","commitResults":[{"hash":"d939adc145f25fee22667cef2ae516e5d55e0dca","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"dd5d0b4f0bee7a29eab8bdcb3048322af6eed788","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"1fa5b091ef40551faed487252bc4a6247d15f335","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"7ea9a42b8613d90a6d2d65d045acaddf8ddcf3c5","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":59,"deletions":7}}},{"hash":"413d537eac2b2a2882d7b248ce4f0d8b27154762","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":36}}},{"hash":"eba8bbc136546a09580c24c60f48e2a2a6f93ea5","isMergeCommit":false,"messageTitle":"fixed double lining","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-22","commitResults":[{"hash":"3965a0c45171cd863925c3e37e0195a210e8333c","isMergeCommit":false,"messageTitle":"Added error catching functionality","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":49}}},{"hash":"36865521f1d995737e8019d3c09dcb17f39599c3","isMergeCommit":false,"messageTitle":"deleting of tasks from task list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2024-01-24","commitResults":[{"hash":"412f760d56a2cc994b396706e0930108f8b4f921","isMergeCommit":false,"messageTitle":"Add the autorunning of tests","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":35,"deletions":0}}},{"hash":"64174a43ea5b15682ac1dd81618539f17e9e4c4d","isMergeCommit":false,"messageTitle":"correct testing methodology","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":35,"deletions":0},"sh":{"insertions":5,"deletions":8}}}]},{"date":"2024-01-25","commitResults":[{"hash":"ff165f0efb8aa20279176104c86114513a1898c7","isMergeCommit":false,"messageTitle":"added saving","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":4}}},{"hash":"c811695f16030aaa41af03d2952a318064c8fce5","isMergeCommit":false,"messageTitle":"added time functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":13}}},{"hash":"8a6cf9e4beb4cf8fec44ae36d470c96607f02909","isMergeCommit":false,"messageTitle":"OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":272,"deletions":185}}},{"hash":"4478a954777931fd1fd77ec1f2113f72d29066f3","isMergeCommit":false,"messageTitle":"added to package duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-26","commitResults":[{"hash":"1379e3307de176da605b8a99bf2597e80a415471","isMergeCommit":true,"messageTitle":"Merge commit \u0027a6f73244a20539e20c2189973ebf597df34ef631\u0027 into A-Packages","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"52aa6682b94a6380ce7eeaf2c9109d285b64c8b8","isMergeCommit":false,"messageTitle":"Added gradle testing and functionality","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":73,"deletions":0}}},{"hash":"d4feed0adddf5bbc883646054c1dce2315873f0a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Packages","A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"8e306b2824bc9526df886a0b189bd9129111259d","isMergeCommit":false,"messageTitle":"Added more JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":0}}},{"hash":"617d11991d293964e69a49215390bf20aa8bccd7","isMergeCommit":false,"messageTitle":"Jar file creation","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2024-01-27","commitResults":[{"hash":"0f6233802a04de9ffc20ee654356bdf14fde4970","isMergeCommit":false,"messageTitle":"gradle checkstyle plus javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":11,"deletions":0},"java":{"insertions":294,"deletions":1}}},{"hash":"3436a90f145e1ebdbee3d0930fa1b59e05c40193","isMergeCommit":false,"messageTitle":"coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":31,"deletions":16}}},{"hash":"4b4e97813ca03afcc541ff621eddd2c88671e8d5","isMergeCommit":false,"messageTitle":"added find capability","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"5c15a053dc46dda43959f2cd52f82b7b9ed0f5d2","isMergeCommit":false,"messageTitle":"changed indentation to follow checkstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}}]},{"date":"2024-01-29","commitResults":[{"hash":"e7485a33153f814dddfc4cdd82dfef9d3e4ab8a3","isMergeCommit":false,"messageTitle":"fix wrong branching","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"1b361110f07265935271189ad111348123ef5107","isMergeCommit":true,"messageTitle":"Merge commit \u0027e7485a33153f814dddfc4cdd82dfef9d3e4ab8a3\u0027 into branch-Level-8","messageBody":"* commit \u0027e7485a33153f814dddfc4cdd82dfef9d3e4ab8a3\u0027:\n fix wrong branching\n","fileTypesAndContributionMap":{}},{"hash":"219a8459f416f419b8a73422e0b010a776dcdea9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n fix wrong branching\n\n# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}}]},{"date":"2024-01-30","commitResults":[{"hash":"a00a335d4e86d85012411e90244b2aab6960cf67","isMergeCommit":false,"messageTitle":"Updated to fit checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":7},"java":{"insertions":37,"deletions":23}}}]}]},"authorFileTypeContributionMap":{"Bandov":{"java":954,"md":0,"fxml":0,"sh":39,"bat":0,"gradle":7,"txt":35}},"authorContributionVariance":{"Bandov":37681.914},"authorDisplayNameMap":{"Bandov":"CS2103T-T11-1 SONG..INIC"}} diff --git a/ChrysanthemumT_ip_master/authorship.json b/ChrysanthemumT_ip_master/authorship.json index 28d1eed6..4b58fc6f 100644 --- a/ChrysanthemumT_ip_master/authorship.json +++ b/ChrysanthemumT_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.InvalidCommandException;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.ListOutofBoundsException;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.MissingArgumentsException;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Deadlines;","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Events;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Todos;","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":"import UI.UI;","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":"import Parser.Parser;","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Task;","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" UI.greeting();","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" boolean flag \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" while(flag) {","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" String input \u003d scanner.nextLine().trim();","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" parser.feed(input);","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" String[] output;","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" output \u003d parser.parse();","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" continue;","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (MissingArgumentsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" continue;","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":" Task task;","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" switch (output[0]) {","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" case \"bye\":","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":" UI.goodbye();","lastModifiedDate":"2024-01-23"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" case \"list\":","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" ui.listItems();","lastModifiedDate":"2024-01-23"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" ui.unMarkTask(Integer.parseInt(output[1]) - 1);","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (ListOutofBoundsException e){","lastModifiedDate":"2024-01-24"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" case \"mark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" ui.markTaskUI(Integer.parseInt(output[1]) - 1);","lastModifiedDate":"2024-01-23"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (ListOutofBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" case \"todo\":","lastModifiedDate":"2024-01-24"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":" task \u003d new Todos(output[1]);","lastModifiedDate":"2024-01-24"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" ui.addItem(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-24"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" task \u003d new Deadlines(output[1], output[2]);","lastModifiedDate":"2024-01-24"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" ui.addItem(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" case \"event\":","lastModifiedDate":"2024-01-24"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" task \u003d new Events(output[1], output[2], output[3]);","lastModifiedDate":"2024-01-24"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" ui.addItem(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"ChrysanthemumT"},"content":" case \"delete\":","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"ChrysanthemumT"},"content":" ui.removeTask(Integer.parseInt(output[1]) - 1);","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (ListOutofBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"ChrysanthemumT"},"content":" default:","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":78,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ChrysanthemumT":76,"-":4}},{"path":"src/main/java/DukeException/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(message);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return \" \" + super.getMessage() + \"\\n You have entered an invalid command:\\n\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" \" Try todo, event, deadline, list , delete , mark {index},\\n or unmark {index} instead.\";","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/DukeException/ListOutofBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class ListOutofBoundsException extends Exception{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public ListOutofBoundsException(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return \" ListOutofBoundsException\\n You have entered an invalid list index:\\n\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" \" List size:\" + super.getMessage();","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/DukeException/MissingArgumentsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsException extends Exception{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsException(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" return \" MissingArgumentException\\n You have missing arguments:\\n\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" \" Try \" + super.getMessage();","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":12}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionDeadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionDeadlines extends MissingArgumentsExceptionTodo{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionDeadlines(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" /by {your deadline}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionEvents.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionEvents extends MissingArgumentsExceptionTodo{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionEvents(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" /from {your starting time} /to {your ending time}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":11}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionMarking.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionMarking extends MissingArgumentsException{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionMarking(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" {index of item in list}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":12}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionTodo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionTodo extends MissingArgumentsException {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionTodo(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" {your item}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Parser;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.*;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"import java.util.Arrays;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"public class Parser {","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" private String input;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public Parser() {","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" this.input \u003d \"\";","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" public Parser(String input) {","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" this.input \u003d input;","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" public void feed(String input) {","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" this.input \u003d input;","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" public String[] parse() throws InvalidCommandException, MissingArgumentsException {","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" String[] ans \u003d new String[4];","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" String[] split \u003d this.input.split(\" \");","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" int flag;","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" int flag2;","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" switch(split[0]) {","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" case \"list\":","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"list\";","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":" case \"bye\":","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"bye\";","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" case \"delete\":","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" case \"mark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length !\u003d 2) {","lastModifiedDate":"2024-01-24"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionMarking(split[0]);","lastModifiedDate":"2024-01-24"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" ans \u003d split;","lastModifiedDate":"2024-01-24"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" case \"todo\":","lastModifiedDate":"2024-01-24"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionTodo(\"todo\");","lastModifiedDate":"2024-01-24"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" int space \u003d this.input.indexOf(\" \");","lastModifiedDate":"2024-01-24"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"todo\";","lastModifiedDate":"2024-01-24"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" ans[1] \u003d this.input.substring(space + 1, this.input.length());","lastModifiedDate":"2024-01-24"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":" case \"event\":","lastModifiedDate":"2024-01-24"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d Arrays.asList(split).indexOf(\"/from\");","lastModifiedDate":"2024-01-24"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" flag2 \u003d Arrays.asList(split).indexOf(\"/to\");","lastModifiedDate":"2024-01-24"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length \u003c 5) {","lastModifiedDate":"2024-01-24"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionEvents(\"event\");","lastModifiedDate":"2024-01-24"},{"lineNumber":68,"author":{"gitId":"ChrysanthemumT"},"content":" } else if (flag \u003c 2 || flag2 \u003d\u003d split.length -1 || flag2 - flag \u003c\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":69,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionEvents(\"event\");","lastModifiedDate":"2024-01-24"},{"lineNumber":70,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":71,"author":{"gitId":"ChrysanthemumT"},"content":" int space \u003d this.input.indexOf(\" \");","lastModifiedDate":"2024-01-24"},{"lineNumber":72,"author":{"gitId":"ChrysanthemumT"},"content":" int slash \u003d this.input.indexOf(\"/\");","lastModifiedDate":"2024-01-24"},{"lineNumber":73,"author":{"gitId":"ChrysanthemumT"},"content":" int sSlash \u003d this.input.indexOf(\"/\", slash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":74,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"event\";","lastModifiedDate":"2024-01-24"},{"lineNumber":75,"author":{"gitId":"ChrysanthemumT"},"content":" ans[1] \u003d this.input.substring(space + 1, slash).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":76,"author":{"gitId":"ChrysanthemumT"},"content":" int from \u003d this.input.indexOf(\" \", slash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":77,"author":{"gitId":"ChrysanthemumT"},"content":" ans[2] \u003d this.input.substring(from + 1, sSlash).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":78,"author":{"gitId":"ChrysanthemumT"},"content":" int to \u003d this.input.indexOf(\" \", sSlash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":79,"author":{"gitId":"ChrysanthemumT"},"content":" ans[3] \u003d this.input.substring(to + 1, this.input.length()).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":80,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":81,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":82,"author":{"gitId":"ChrysanthemumT"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-24"},{"lineNumber":83,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d Arrays.asList(split).indexOf(\"/by\");","lastModifiedDate":"2024-01-24"},{"lineNumber":84,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length \u003c 4) {","lastModifiedDate":"2024-01-24"},{"lineNumber":85,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionDeadlines(\"deadline\");","lastModifiedDate":"2024-01-24"},{"lineNumber":86,"author":{"gitId":"ChrysanthemumT"},"content":" } else if (flag \u003c 2 || flag \u003d\u003d split.length -1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":87,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionDeadlines(\"deadline\");","lastModifiedDate":"2024-01-24"},{"lineNumber":88,"author":{"gitId":"ChrysanthemumT"},"content":" }else {","lastModifiedDate":"2024-01-24"},{"lineNumber":89,"author":{"gitId":"ChrysanthemumT"},"content":" int space \u003d this.input.indexOf(\" \");","lastModifiedDate":"2024-01-24"},{"lineNumber":90,"author":{"gitId":"ChrysanthemumT"},"content":" int slash \u003d this.input.indexOf(\"/\");","lastModifiedDate":"2024-01-24"},{"lineNumber":91,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"deadline\";","lastModifiedDate":"2024-01-24"},{"lineNumber":92,"author":{"gitId":"ChrysanthemumT"},"content":" ans[1] \u003d this.input.substring(space + 1, slash).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":93,"author":{"gitId":"ChrysanthemumT"},"content":" int by \u003d this.input.indexOf(\" \", slash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":94,"author":{"gitId":"ChrysanthemumT"},"content":" ans[2] \u003d this.input.substring(by+1, this.input.length()).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":95,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":96,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":97,"author":{"gitId":"ChrysanthemumT"},"content":" default:","lastModifiedDate":"2024-01-24"},{"lineNumber":98,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-24"},{"lineNumber":99,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":100,"author":{"gitId":"ChrysanthemumT"},"content":" return ans;","lastModifiedDate":"2024-01-24"},{"lineNumber":101,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":102,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":103,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":103}},{"path":"src/main/java/Storage/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" protected String by;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" public Deadlines(String description, String by) {","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" super(description);","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/Storage/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class Events extends Task{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" protected String from;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" protected String to;","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" public Events(String description,String from,String to) {","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" super(description);","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":17}},{"path":"src/main/java/Storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"public class Storage {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" private static final String lines \u003d \" ____________________________________________________________\";","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" private final ArrayList\u003cTask\u003e storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public Storage() {","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" public void add(Task task) {","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.add(task);","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" public void markTask(int number) {","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.get(number).mark();","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + this.storage.get(number).toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" public void unMarkTask(int number) {","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.get(number).unMark();","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + this.storage.get(number).toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" public void remove(int number) {","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + this.storage.get(number).toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.remove(number);","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" public int taskLength() {","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" return this.storage.size();","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2024-01-23"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" result.append(lines).append(\"\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" for(int i\u003d1;i\u003c\u003dstorage.size();i++) {","lastModifiedDate":"2024-01-23"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" result.append(String.format(\" %d.\",i)).append(this.storage.get(i-1).toString()).append(\"\\n\");","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" result.append(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" return result.toString();","lastModifiedDate":"2024-01-23"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":46}},{"path":"src/main/java/Storage/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import java.text.Normalizer;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"public class Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" protected String description;","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" public void mark() {","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" public void unMark() {","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" return String.format(\"[%s] \", getStatusIcon()) + description;","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":31}},{"path":"src/main/java/Storage/Todos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class Todos extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public Todos(String description) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(description);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":12}},{"path":"src/main/java/UI/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package UI;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Task;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.*;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"public class UI {","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" private static final String lines \u003d \" ____________________________________________________________\";","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" private static final String name \u003d \"Wang\";","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" private final Storage storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" public UI() {","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" public static void greeting() {","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.printf(\" Hello! I\u0027m %s\\n\", name);","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" public static void goodbye() {","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" public void addItem(Task task) {","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.add(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + \"Got it. I\u0027ve added this task:\\n\" + \" \" + task + \"\\n\" + \"\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":" String.format(\" Now you have %d tasks in the list.\", this.storage.taskLength()));","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" public void markTaskUI(int input) throws ListOutofBoundsException{","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" if (input \u003c0 || input \u003e this.storage.taskLength() - 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" throw new ListOutofBoundsException(String.format(\"%d\", this.storage.taskLength()));","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.markTask(input);","lastModifiedDate":"2024-01-23"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" public void unMarkTask(int input) throws ListOutofBoundsException{","lastModifiedDate":"2024-01-24"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" if (input \u003c 0 || input \u003e this.storage.taskLength() - 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" throw new ListOutofBoundsException(String.format(\"%d\", this.storage.taskLength()));","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.unMarkTask(input);","lastModifiedDate":"2024-01-23"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" public void removeTask(int input) throws ListOutofBoundsException {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" if (input \u003c 0 || input \u003e this.storage.taskLength() - 1) {","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" throw new ListOutofBoundsException(String.format(\"%d\", this.storage.taskLength()));","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.remove(input);","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(String.format(\" Now you have %d tasks in the list.\",this.storage.taskLength()));","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"ChrysanthemumT"},"content":" public void listItems() {","lastModifiedDate":"2024-01-23"},{"lineNumber":69,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(storage);","lastModifiedDate":"2024-01-23"},{"lineNumber":70,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":71,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":72,"author":{"gitId":"ChrysanthemumT"},"content":" public void error(String error) {","lastModifiedDate":"2024-01-24"},{"lineNumber":73,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-24"},{"lineNumber":74,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(error);","lastModifiedDate":"2024-01-24"},{"lineNumber":75,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-24"},{"lineNumber":76,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":77,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":78,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":79,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":79}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"hi","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"deadline cs2101 by/ friday","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"event midterms /from idk /to idk","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"todo cs2103t","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"list","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":8}}] +[{"path":"data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":" ____________________________________________________________","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":" 1.[T][ ] help","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":" ____________________________________________________________","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"ChrysanthemumT":3}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.InvalidCommandException;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.ListOutofBoundsException;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.MissingArgumentsException;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Deadlines;","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Events;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Todos;","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":"import UI.UI;","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":"import Parser.Parser;","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Task;","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" UI.greeting();","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" boolean flag \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" while(flag) {","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" String input \u003d scanner.nextLine().trim();","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" parser.feed(input);","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" String[] output;","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" output \u003d parser.parse();","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" continue;","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (MissingArgumentsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" continue;","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" Task task;","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" switch (output[0]) {","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":" case \"bye\":","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" UI.goodbye();","lastModifiedDate":"2024-01-23"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" case \"list\":","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" ui.listItems();","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" ui.unMarkTask(Integer.parseInt(output[1]) - 1);","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (ListOutofBoundsException e){","lastModifiedDate":"2024-01-24"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" case \"mark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" ui.markTaskUI(Integer.parseInt(output[1]) - 1);","lastModifiedDate":"2024-01-23"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (ListOutofBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":" case \"todo\":","lastModifiedDate":"2024-01-24"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" task \u003d new Todos(output[1]);","lastModifiedDate":"2024-01-24"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" ui.addItem(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-24"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" task \u003d new Deadlines(output[1], output[2]);","lastModifiedDate":"2024-01-24"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":" ui.addItem(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" case \"event\":","lastModifiedDate":"2024-01-24"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" task \u003d new Events(output[1], output[2], output[3]);","lastModifiedDate":"2024-01-24"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":" ui.addItem(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":68,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":69,"author":{"gitId":"ChrysanthemumT"},"content":" case \"delete\":","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":71,"author":{"gitId":"ChrysanthemumT"},"content":" ui.removeTask(Integer.parseInt(output[1]) - 1);","lastModifiedDate":"2024-01-25"},{"lineNumber":72,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (ListOutofBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":73,"author":{"gitId":"ChrysanthemumT"},"content":" ui.error(e.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":76,"author":{"gitId":"ChrysanthemumT"},"content":" default:","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":79,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":81,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ChrysanthemumT":77,"-":4}},{"path":"src/main/java/DukeException/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public InvalidCommandException(String message) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(message);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return \" \" + super.getMessage() + \"\\n You have entered an invalid command:\\n\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" \" Try todo, event, deadline, list , delete , mark {index},\\n or unmark {index} instead.\";","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/DukeException/ListOutofBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class ListOutofBoundsException extends Exception{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public ListOutofBoundsException(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return \" ListOutofBoundsException\\n You have entered an invalid list index:\\n\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" \" List size:\" + super.getMessage();","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/DukeException/MissingArgumentsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsException extends Exception{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsException(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" return \" MissingArgumentException\\n You have missing arguments:\\n\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" \" Try \" + super.getMessage();","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":12}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionDeadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionDeadlines extends MissingArgumentsExceptionTodo{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionDeadlines(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" /by {your deadline}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionEvents.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionEvents extends MissingArgumentsExceptionTodo{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionEvents(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" /from {your starting time} /to {your ending time}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":11}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionMarking.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionMarking extends MissingArgumentsException{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionMarking(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" {index of item in list}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":12}},{"path":"src/main/java/DukeException/MissingArgumentsExceptionTodo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package DukeException;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class MissingArgumentsExceptionTodo extends MissingArgumentsException {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public MissingArgumentsExceptionTodo(String string) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(string);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String getMessage() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return super.getMessage() + \" {your item}\";","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/Parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Parser;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.*;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"import java.util.Arrays;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"enum COMMANDS {","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" LIST, BYE, DELETE, UNMARK, MARK, TODO, EVENT, DEADLINE, INVALID","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":"public class Parser {","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" private String input;","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" public Parser() {","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" this.input \u003d \"\";","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" public Parser(String input) {","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" this.input \u003d input;","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" public void feed(String input) {","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" this.input \u003d input;","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" public String[] parse() throws InvalidCommandException, MissingArgumentsException {","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" String[] ans \u003d new String[4];","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" String[] split \u003d this.input.split(\" \");","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" int flag;","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" int flag2;","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" switch(split[0]) {","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" case \"list\":","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"list\";","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" case \"bye\":","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length !\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"bye\";","lastModifiedDate":"2024-01-24"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" case \"delete\":","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" // Fallthrough","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" // Fallthrough","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" case \"mark\":","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length !\u003d 2) {","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionMarking(split[0]);","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d Integer.parseInt(split[1]);","lastModifiedDate":"2024-01-24"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":" ans \u003d split;","lastModifiedDate":"2024-01-24"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" case \"todo\":","lastModifiedDate":"2024-01-24"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length \u003d\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionTodo(\"todo\");","lastModifiedDate":"2024-01-24"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" int space \u003d this.input.indexOf(\" \");","lastModifiedDate":"2024-01-24"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"todo\";","lastModifiedDate":"2024-01-24"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" ans[1] \u003d this.input.substring(space + 1, this.input.length());","lastModifiedDate":"2024-01-24"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":68,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":69,"author":{"gitId":"ChrysanthemumT"},"content":" case \"event\":","lastModifiedDate":"2024-01-24"},{"lineNumber":70,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d Arrays.asList(split).indexOf(\"/from\");","lastModifiedDate":"2024-01-24"},{"lineNumber":71,"author":{"gitId":"ChrysanthemumT"},"content":" flag2 \u003d Arrays.asList(split).indexOf(\"/to\");","lastModifiedDate":"2024-01-24"},{"lineNumber":72,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length \u003c 5) {","lastModifiedDate":"2024-01-24"},{"lineNumber":73,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionEvents(\"event\");","lastModifiedDate":"2024-01-24"},{"lineNumber":74,"author":{"gitId":"ChrysanthemumT"},"content":" } else if (flag \u003c 2 || flag2 \u003d\u003d split.length -1 || flag2 - flag \u003c\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":75,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionEvents(\"event\");","lastModifiedDate":"2024-01-24"},{"lineNumber":76,"author":{"gitId":"ChrysanthemumT"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":77,"author":{"gitId":"ChrysanthemumT"},"content":" int space \u003d this.input.indexOf(\" \");","lastModifiedDate":"2024-01-24"},{"lineNumber":78,"author":{"gitId":"ChrysanthemumT"},"content":" int slash \u003d this.input.indexOf(\"/\");","lastModifiedDate":"2024-01-24"},{"lineNumber":79,"author":{"gitId":"ChrysanthemumT"},"content":" int sSlash \u003d this.input.indexOf(\"/\", slash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":80,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"event\";","lastModifiedDate":"2024-01-24"},{"lineNumber":81,"author":{"gitId":"ChrysanthemumT"},"content":" ans[1] \u003d this.input.substring(space + 1, slash).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":82,"author":{"gitId":"ChrysanthemumT"},"content":" int from \u003d this.input.indexOf(\" \", slash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":83,"author":{"gitId":"ChrysanthemumT"},"content":" ans[2] \u003d this.input.substring(from + 1, sSlash).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":84,"author":{"gitId":"ChrysanthemumT"},"content":" int to \u003d this.input.indexOf(\" \", sSlash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":85,"author":{"gitId":"ChrysanthemumT"},"content":" ans[3] \u003d this.input.substring(to + 1, this.input.length()).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":86,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":87,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":88,"author":{"gitId":"ChrysanthemumT"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-24"},{"lineNumber":89,"author":{"gitId":"ChrysanthemumT"},"content":" flag \u003d Arrays.asList(split).indexOf(\"/by\");","lastModifiedDate":"2024-01-24"},{"lineNumber":90,"author":{"gitId":"ChrysanthemumT"},"content":" if (split.length \u003c 4) {","lastModifiedDate":"2024-01-24"},{"lineNumber":91,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionDeadlines(\"deadline\");","lastModifiedDate":"2024-01-24"},{"lineNumber":92,"author":{"gitId":"ChrysanthemumT"},"content":" } else if (flag \u003c 2 || flag \u003d\u003d split.length -1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":93,"author":{"gitId":"ChrysanthemumT"},"content":" throw new MissingArgumentsExceptionDeadlines(\"deadline\");","lastModifiedDate":"2024-01-24"},{"lineNumber":94,"author":{"gitId":"ChrysanthemumT"},"content":" }else {","lastModifiedDate":"2024-01-24"},{"lineNumber":95,"author":{"gitId":"ChrysanthemumT"},"content":" int space \u003d this.input.indexOf(\" \");","lastModifiedDate":"2024-01-24"},{"lineNumber":96,"author":{"gitId":"ChrysanthemumT"},"content":" int slash \u003d this.input.indexOf(\"/\");","lastModifiedDate":"2024-01-24"},{"lineNumber":97,"author":{"gitId":"ChrysanthemumT"},"content":" ans[0] \u003d \"deadline\";","lastModifiedDate":"2024-01-24"},{"lineNumber":98,"author":{"gitId":"ChrysanthemumT"},"content":" ans[1] \u003d this.input.substring(space + 1, slash).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":99,"author":{"gitId":"ChrysanthemumT"},"content":" int by \u003d this.input.indexOf(\" \", slash + 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":100,"author":{"gitId":"ChrysanthemumT"},"content":" ans[2] \u003d this.input.substring(by+1, this.input.length()).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":101,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":102,"author":{"gitId":"ChrysanthemumT"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":103,"author":{"gitId":"ChrysanthemumT"},"content":" default:","lastModifiedDate":"2024-01-24"},{"lineNumber":104,"author":{"gitId":"ChrysanthemumT"},"content":" throw new InvalidCommandException(\"InvalidCommandException\");","lastModifiedDate":"2024-01-24"},{"lineNumber":105,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":106,"author":{"gitId":"ChrysanthemumT"},"content":" return ans;","lastModifiedDate":"2024-01-24"},{"lineNumber":107,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":108,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":109,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":109}},{"path":"src/main/java/Storage/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" protected String by;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" public Deadlines(String description, String by) {","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" super(description);","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":13}},{"path":"src/main/java/Storage/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class Events extends Task{","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" protected String from;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" protected String to;","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" public Events(String description,String from,String to) {","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" super(description);","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":17}},{"path":"src/main/java/Storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":"import UI.UI;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":"public class Storage {","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" private static final String lines \u003d \" ____________________________________________________________\";","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" private final ArrayList\u003cTask\u003e storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" public Storage() {","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" public void add(Task task) {","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.add(task);","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" saveToFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" public void markTask(int number) {","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.get(number).mark();","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + this.storage.get(number).toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" saveToFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" public void unMarkTask(int number) {","lastModifiedDate":"2024-01-23"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.get(number).unMark();","lastModifiedDate":"2024-01-23"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + this.storage.get(number).toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" saveToFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" public void remove(int number) {","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + this.storage.get(number).toString());","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.remove(number);","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" saveToFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" public int taskLength() {","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" return this.storage.size();","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" result.append(lines).append(\"\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" for(int i\u003d1;i\u003c\u003dstorage.size();i++) {","lastModifiedDate":"2024-01-23"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" result.append(String.format(\" %d.\",i)).append(this.storage.get(i-1).toString()).append(\"\\n\");","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" result.append(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" return result.toString();","lastModifiedDate":"2024-01-23"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" private void saveToFile() {","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" FileWriter fileWriter \u003d new FileWriter(\"./tsrc/main/java/Storage/data.txt\");","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":" fileWriter.write(toString());","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" fileWriter.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" UI.error(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" private String formatDataForFile() {","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" return \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":67}},{"path":"src/main/java/Storage/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import java.text.Normalizer;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"public class Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" protected String description;","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" public void mark() {","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":" public void unMark() {","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":" return String.format(\"[%s] \", getStatusIcon()) + description;","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":31}},{"path":"src/main/java/Storage/Todos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package Storage;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"public class Todos extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":" public Todos(String description) {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":" super(description);","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":12}},{"path":"src/main/java/Storage/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":" ____________________________________________________________","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":" 1.[D][ ] ip (by: tonite)","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":" ____________________________________________________________","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"ChrysanthemumT":3}},{"path":"src/main/java/UI/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"package UI;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"import Storage.Task;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"import DukeException.*;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"public class UI {","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":" private static final String lines \u003d \" ____________________________________________________________\";","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"ChrysanthemumT"},"content":" private static final String name \u003d \"Wang\";","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"ChrysanthemumT"},"content":" private final Storage storage;","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"ChrysanthemumT"},"content":" public UI() {","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"ChrysanthemumT"},"content":" public static void greeting() {","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.printf(\" Hello! I\u0027m %s\\n\", name);","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"ChrysanthemumT"},"content":" public static void goodbye() {","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":29,"author":{"gitId":"ChrysanthemumT"},"content":" public void addItem(Task task) {","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.add(task);","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":32,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" \" + \"Got it. I\u0027ve added this task:\\n\" + \" \" + task + \"\\n\" + \"\" +","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChrysanthemumT"},"content":" String.format(\" Now you have %d tasks in the list.\", this.storage.taskLength()));","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":35,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":36,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":37,"author":{"gitId":"ChrysanthemumT"},"content":" public void markTaskUI(int input) throws ListOutofBoundsException{","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"ChrysanthemumT"},"content":" if (input \u003c0 || input \u003e this.storage.taskLength() - 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"ChrysanthemumT"},"content":" throw new ListOutofBoundsException(String.format(\"%d\", this.storage.taskLength()));","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":43,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.markTask(input);","lastModifiedDate":"2024-01-23"},{"lineNumber":44,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"ChrysanthemumT"},"content":" public void unMarkTask(int input) throws ListOutofBoundsException{","lastModifiedDate":"2024-01-24"},{"lineNumber":47,"author":{"gitId":"ChrysanthemumT"},"content":" if (input \u003c 0 || input \u003e this.storage.taskLength() - 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"ChrysanthemumT"},"content":" throw new ListOutofBoundsException(String.format(\"%d\", this.storage.taskLength()));","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":51,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":52,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.unMarkTask(input);","lastModifiedDate":"2024-01-23"},{"lineNumber":53,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-23"},{"lineNumber":54,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":55,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":56,"author":{"gitId":"ChrysanthemumT"},"content":" public void removeTask(int input) throws ListOutofBoundsException {","lastModifiedDate":"2024-01-25"},{"lineNumber":57,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":58,"author":{"gitId":"ChrysanthemumT"},"content":" if (input \u003c 0 || input \u003e this.storage.taskLength() - 1) {","lastModifiedDate":"2024-01-25"},{"lineNumber":59,"author":{"gitId":"ChrysanthemumT"},"content":" throw new ListOutofBoundsException(String.format(\"%d\", this.storage.taskLength()));","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":61,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-25"},{"lineNumber":62,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-25"},{"lineNumber":63,"author":{"gitId":"ChrysanthemumT"},"content":" this.storage.remove(input);","lastModifiedDate":"2024-01-25"},{"lineNumber":64,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(String.format(\" Now you have %d tasks in the list.\",this.storage.taskLength()));","lastModifiedDate":"2024-01-25"},{"lineNumber":65,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-25"},{"lineNumber":66,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":68,"author":{"gitId":"ChrysanthemumT"},"content":" public void listItems() {","lastModifiedDate":"2024-01-23"},{"lineNumber":69,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(storage);","lastModifiedDate":"2024-01-23"},{"lineNumber":70,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":71,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":72,"author":{"gitId":"ChrysanthemumT"},"content":" public static void error(String error) {","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-24"},{"lineNumber":74,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(error);","lastModifiedDate":"2024-01-24"},{"lineNumber":75,"author":{"gitId":"ChrysanthemumT"},"content":" System.out.println(lines);","lastModifiedDate":"2024-01-24"},{"lineNumber":76,"author":{"gitId":"ChrysanthemumT"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":77,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":78,"author":{"gitId":"ChrysanthemumT"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":79,"author":{"gitId":"ChrysanthemumT"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"ChrysanthemumT":79}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChrysanthemumT"},"content":"hi","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChrysanthemumT"},"content":"deadline cs2101 by/ friday","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChrysanthemumT"},"content":"event midterms /from idk /to idk","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"ChrysanthemumT"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChrysanthemumT"},"content":"todo cs2103t","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"ChrysanthemumT"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChrysanthemumT"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChrysanthemumT"},"content":"list","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"ChrysanthemumT":8}}] diff --git a/ChrysanthemumT_ip_master/commits.json b/ChrysanthemumT_ip_master/commits.json index ab6ae918..f7898d52 100644 --- a/ChrysanthemumT_ip_master/commits.json +++ b/ChrysanthemumT_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ChrysanthemumT":[{"date":"2024-01-23","commitResults":[{"hash":"5b2b50e54cd9e1e5095d0480c88070d5159dddcb","isMergeCommit":false,"messageTitle":"basic skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"53f13b662becbd818cbe80f26d852b4dd3e16318","isMergeCommit":false,"messageTitle":"added echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":10}}},{"hash":"2611fcf7d4177e75f21496d2997ef1a12f9733ff","isMergeCommit":false,"messageTitle":"add, list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":3}}},{"hash":"e855a884c4b2d2b2bf8c3b46fcf72b8c6507da38","isMergeCommit":false,"messageTitle":"Mark as Done complete","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":11}}}]},{"date":"2024-01-24","commitResults":[{"hash":"46ce15c4dd3cfd1a3333f7999baf4268f84a7e16","isMergeCommit":false,"messageTitle":"level-4 added todo event deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":19}}},{"hash":"638ca9c9c8fb270ebf7d9180bb50871f628aa71c","isMergeCommit":false,"messageTitle":"automated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"51f7a9693aa90a8c82e1d26f2ea5770ad3d7c1b9","isMergeCommit":false,"messageTitle":"handled errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":39}}}]},{"date":"2024-01-25","commitResults":[{"hash":"cacb6232322a3fb4400c5d957dbfd3f9aa28f239","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"ChrysanthemumT":{"java":464,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":8}},"authorContributionVariance":{"ChrysanthemumT":20129.834},"authorDisplayNameMap":{"ChrysanthemumT":"CS2103T-W11-3 WANG..HONG"}} +{"authorDailyContributionsMap":{"ChrysanthemumT":[{"date":"2024-01-23","commitResults":[{"hash":"5b2b50e54cd9e1e5095d0480c88070d5159dddcb","isMergeCommit":false,"messageTitle":"basic skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"53f13b662becbd818cbe80f26d852b4dd3e16318","isMergeCommit":false,"messageTitle":"added echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":10}}},{"hash":"2611fcf7d4177e75f21496d2997ef1a12f9733ff","isMergeCommit":false,"messageTitle":"add, list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":3}}},{"hash":"e855a884c4b2d2b2bf8c3b46fcf72b8c6507da38","isMergeCommit":false,"messageTitle":"Mark as Done complete","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":11}}}]},{"date":"2024-01-24","commitResults":[{"hash":"46ce15c4dd3cfd1a3333f7999baf4268f84a7e16","isMergeCommit":false,"messageTitle":"level-4 added todo event deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":19}}},{"hash":"638ca9c9c8fb270ebf7d9180bb50871f628aa71c","isMergeCommit":false,"messageTitle":"automated testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"51f7a9693aa90a8c82e1d26f2ea5770ad3d7c1b9","isMergeCommit":false,"messageTitle":"handled errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":39}}}]},{"date":"2024-01-25","commitResults":[{"hash":"cacb6232322a3fb4400c5d957dbfd3f9aa28f239","isMergeCommit":false,"messageTitle":"added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}}]},{"date":"2024-01-30","commitResults":[{"hash":"d8650e361311a8b1567d8a24d3fdfcb3d1c738a8","isMergeCommit":false,"messageTitle":"Add saving feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":147,"deletions":119}}},{"hash":"5d40a6d1ea3154e8729f9536c9647dd509488fdc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027 Merge saving feature from branch to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ChrysanthemumT":{"java":492,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":14}},"authorContributionVariance":{"ChrysanthemumT":17034.137},"authorDisplayNameMap":{"ChrysanthemumT":"CS2103T-W11-3 WANG..HONG"}} diff --git a/ChuaZiLong_ip_master/authorship.json b/ChuaZiLong_ip_master/authorship.json index 21706d21..c5f3bbc3 100644 --- a/ChuaZiLong_ip_master/authorship.json +++ b/ChuaZiLong_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.File;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2024-01-28"},{"lineNumber":6,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"ChuaZiLong"},"content":"class DukeException extends Exception {","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"ChuaZiLong"},"content":" public DukeException(String message) {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"ChuaZiLong"},"content":" super(message);","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"ChuaZiLong"},"content":"enum TaskType {","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"ChuaZiLong"},"content":" TODO,","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"ChuaZiLong"},"content":" DEADLINE,","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"ChuaZiLong"},"content":" EVENT","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"ChuaZiLong"},"content":"class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"ChuaZiLong"},"content":" protected String description;","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"ChuaZiLong"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"ChuaZiLong"},"content":" protected TaskType taskType;","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"ChuaZiLong"},"content":" public Task(String description, TaskType taskType) {","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"ChuaZiLong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"ChuaZiLong"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"ChuaZiLong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"ChuaZiLong"},"content":" return \"[\" + taskType + \"]\" + (isDone ? \"[X] \" : \"[ ] \");","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"ChuaZiLong"},"content":" return description;","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":42,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsNotDone() {","lastModifiedDate":"2024-01-24"},{"lineNumber":43,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":44,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":45,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":46,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":47,"author":{"gitId":"ChuaZiLong"},"content":"class Todo extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"ChuaZiLong"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-24"},{"lineNumber":49,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":52,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":53,"author":{"gitId":"ChuaZiLong"},"content":"class Deadline extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":54,"author":{"gitId":"ChuaZiLong"},"content":" protected String by;","lastModifiedDate":"2024-01-24"},{"lineNumber":55,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":56,"author":{"gitId":"ChuaZiLong"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2024-01-24"},{"lineNumber":57,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2024-01-24"},{"lineNumber":58,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-24"},{"lineNumber":59,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":60,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":61,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":62,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-24"},{"lineNumber":63,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-24"},{"lineNumber":64,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":65,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":66,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":67,"author":{"gitId":"ChuaZiLong"},"content":"class Event extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":68,"author":{"gitId":"ChuaZiLong"},"content":" protected String from;","lastModifiedDate":"2024-01-24"},{"lineNumber":69,"author":{"gitId":"ChuaZiLong"},"content":" protected String to;","lastModifiedDate":"2024-01-24"},{"lineNumber":70,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":71,"author":{"gitId":"ChuaZiLong"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2024-01-24"},{"lineNumber":72,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2024-01-24"},{"lineNumber":73,"author":{"gitId":"ChuaZiLong"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-24"},{"lineNumber":74,"author":{"gitId":"ChuaZiLong"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-24"},{"lineNumber":75,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":76,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":77,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":78,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-24"},{"lineNumber":79,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2024-01-24"},{"lineNumber":80,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":81,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":82,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":83,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":84,"author":{"gitId":"ChuaZiLong"},"content":" private static final String DIRECTORY_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2024-01-28"},{"lineNumber":85,"author":{"gitId":"ChuaZiLong"},"content":" private static final String FILE_PATH \u003d DIRECTORY_PATH + File.separator + \"duke.txt\";","lastModifiedDate":"2024-01-28"},{"lineNumber":86,"author":{"gitId":"ChuaZiLong"},"content":" private static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-24"},{"lineNumber":87,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":89,"author":{"gitId":"ChuaZiLong"},"content":" loadTasksFromFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":90,"author":{"gitId":"ChuaZiLong"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-24"},{"lineNumber":91,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":92,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Hello! I\u0027m SCZL\");","lastModifiedDate":"2024-01-24"},{"lineNumber":93,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2024-01-24"},{"lineNumber":94,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":95,"author":{"gitId":"ChuaZiLong"},"content":" while (true) {","lastModifiedDate":"2024-01-24"},{"lineNumber":96,"author":{"gitId":"ChuaZiLong"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2024-01-24"},{"lineNumber":97,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":98,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2024-01-24"},{"lineNumber":99,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":100,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":101,"author":{"gitId":"ChuaZiLong"},"content":" if (userInput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":102,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-24"},{"lineNumber":103,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":104,"author":{"gitId":"ChuaZiLong"},"content":" } else if (userInput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":105,"author":{"gitId":"ChuaZiLong"},"content":" listTasks();","lastModifiedDate":"2024-01-24"},{"lineNumber":106,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":107,"author":{"gitId":"ChuaZiLong"},"content":" processTaskInput(userInput);","lastModifiedDate":"2024-01-24"},{"lineNumber":108,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":109,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":110,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + e.getMessage());","lastModifiedDate":"2024-01-24"},{"lineNumber":111,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":112,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":113,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":114,"author":{"gitId":"ChuaZiLong"},"content":" scanner.close();","lastModifiedDate":"2024-01-24"},{"lineNumber":115,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":116,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":117,"author":{"gitId":"ChuaZiLong"},"content":" private static void processTaskInput(String userInput) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":118,"author":{"gitId":"ChuaZiLong"},"content":" if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":119,"author":{"gitId":"ChuaZiLong"},"content":" addTodoTask(userInput.substring(5).trim());","lastModifiedDate":"2024-01-24"},{"lineNumber":120,"author":{"gitId":"ChuaZiLong"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":121,"author":{"gitId":"ChuaZiLong"},"content":" addDeadlineTask(userInput.substring(9).trim());","lastModifiedDate":"2024-01-24"},{"lineNumber":122,"author":{"gitId":"ChuaZiLong"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":123,"author":{"gitId":"ChuaZiLong"},"content":" addEventTask(userInput.substring(6).trim());","lastModifiedDate":"2024-01-24"},{"lineNumber":124,"author":{"gitId":"ChuaZiLong"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":125,"author":{"gitId":"ChuaZiLong"},"content":" markTask(userInput);","lastModifiedDate":"2024-01-24"},{"lineNumber":126,"author":{"gitId":"ChuaZiLong"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":127,"author":{"gitId":"ChuaZiLong"},"content":" unmarkTask(userInput);","lastModifiedDate":"2024-01-24"},{"lineNumber":128,"author":{"gitId":"ChuaZiLong"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":129,"author":{"gitId":"ChuaZiLong"},"content":" deleteTask(userInput);","lastModifiedDate":"2024-01-24"},{"lineNumber":130,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":131,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2024-01-24"},{"lineNumber":132,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":133,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":134,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":135,"author":{"gitId":"ChuaZiLong"},"content":" private static void addTodoTask(String description) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":136,"author":{"gitId":"ChuaZiLong"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":137,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":138,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":139,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":140,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2024-01-24"},{"lineNumber":141,"author":{"gitId":"ChuaZiLong"},"content":" printTaskAddedMessage(tasks.get(tasks.size() - 1));","lastModifiedDate":"2024-01-24"},{"lineNumber":142,"author":{"gitId":"ChuaZiLong"},"content":" saveTasksToFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":143,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":144,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":145,"author":{"gitId":"ChuaZiLong"},"content":" private static void addDeadlineTask(String input) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":146,"author":{"gitId":"ChuaZiLong"},"content":" int byIndex \u003d input.indexOf(\"/by\");","lastModifiedDate":"2024-01-24"},{"lineNumber":147,"author":{"gitId":"ChuaZiLong"},"content":" if (byIndex !\u003d -1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":148,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d input.substring(0, byIndex).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":149,"author":{"gitId":"ChuaZiLong"},"content":" String by \u003d input.substring(byIndex + 3).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":150,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":151,"author":{"gitId":"ChuaZiLong"},"content":" if (description.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":152,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! The description and /by cannot be empty for a deadline.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":153,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":154,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":155,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(new Deadline(description, by));","lastModifiedDate":"2024-01-24"},{"lineNumber":156,"author":{"gitId":"ChuaZiLong"},"content":" printTaskAddedMessage(tasks.get(tasks.size() - 1));","lastModifiedDate":"2024-01-24"},{"lineNumber":157,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":158,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid deadline command format.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":159,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":160,"author":{"gitId":"ChuaZiLong"},"content":" saveTasksToFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":161,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":162,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":163,"author":{"gitId":"ChuaZiLong"},"content":" private static void addEventTask(String input) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":164,"author":{"gitId":"ChuaZiLong"},"content":" int fromIndex \u003d input.indexOf(\"/from\");","lastModifiedDate":"2024-01-24"},{"lineNumber":165,"author":{"gitId":"ChuaZiLong"},"content":" int toIndex \u003d input.indexOf(\"/to\");","lastModifiedDate":"2024-01-24"},{"lineNumber":166,"author":{"gitId":"ChuaZiLong"},"content":" if (fromIndex !\u003d -1 \u0026\u0026 toIndex !\u003d -1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":167,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d input.substring(0, fromIndex).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":168,"author":{"gitId":"ChuaZiLong"},"content":" String from \u003d input.substring(fromIndex + 5, toIndex).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":169,"author":{"gitId":"ChuaZiLong"},"content":" String to \u003d input.substring(toIndex + 3).trim();","lastModifiedDate":"2024-01-24"},{"lineNumber":170,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":171,"author":{"gitId":"ChuaZiLong"},"content":" if (description.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":172,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! The description, /from, and /to cannot be empty for an event.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":173,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":174,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":175,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2024-01-24"},{"lineNumber":176,"author":{"gitId":"ChuaZiLong"},"content":" printTaskAddedMessage(tasks.get(tasks.size() - 1));","lastModifiedDate":"2024-01-24"},{"lineNumber":177,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":178,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid event command format.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":179,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":180,"author":{"gitId":"ChuaZiLong"},"content":" saveTasksToFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":182,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":183,"author":{"gitId":"ChuaZiLong"},"content":" private static void markTask(String userInput) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":184,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":185,"author":{"gitId":"ChuaZiLong"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(5).trim()) - 1;","lastModifiedDate":"2024-01-24"},{"lineNumber":186,"author":{"gitId":"ChuaZiLong"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":187,"author":{"gitId":"ChuaZiLong"},"content":" tasks.get(taskIndex).markAsDone();","lastModifiedDate":"2024-01-24"},{"lineNumber":188,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":189,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + tasks.get(taskIndex).getStatusIcon() + tasks.get(taskIndex).getDescription());","lastModifiedDate":"2024-01-24"},{"lineNumber":190,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":191,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":192,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":193,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException | StringIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":194,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid command format.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":195,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":196,"author":{"gitId":"ChuaZiLong"},"content":" saveTasksToFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":197,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":198,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":199,"author":{"gitId":"ChuaZiLong"},"content":" private static void unmarkTask(String userInput) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":200,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":201,"author":{"gitId":"ChuaZiLong"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7).trim()) - 1;","lastModifiedDate":"2024-01-24"},{"lineNumber":202,"author":{"gitId":"ChuaZiLong"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":203,"author":{"gitId":"ChuaZiLong"},"content":" tasks.get(taskIndex).markAsNotDone();","lastModifiedDate":"2024-01-24"},{"lineNumber":204,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":205,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + tasks.get(taskIndex).getStatusIcon() + tasks.get(taskIndex).getDescription());","lastModifiedDate":"2024-01-24"},{"lineNumber":206,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":207,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":208,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":209,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException | StringIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":210,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid command format.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":211,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":212,"author":{"gitId":"ChuaZiLong"},"content":" saveTasksToFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":213,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":214,"author":{"gitId":"ChuaZiLong"},"content":" private static void loadTasksFromFile() {","lastModifiedDate":"2024-01-28"},{"lineNumber":215,"author":{"gitId":"ChuaZiLong"},"content":" File directory \u003d new File(DIRECTORY_PATH);","lastModifiedDate":"2024-01-28"},{"lineNumber":216,"author":{"gitId":"ChuaZiLong"},"content":" if (!directory.exists()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":217,"author":{"gitId":"ChuaZiLong"},"content":" directory.mkdirs();","lastModifiedDate":"2024-01-28"},{"lineNumber":218,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":219,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":220,"author":{"gitId":"ChuaZiLong"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2024-01-28"},{"lineNumber":221,"author":{"gitId":"ChuaZiLong"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":222,"author":{"gitId":"ChuaZiLong"},"content":" return; // File will be created when saving tasks for the first time.","lastModifiedDate":"2024-01-28"},{"lineNumber":223,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":224,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":225,"author":{"gitId":"ChuaZiLong"},"content":" try (Scanner fileScanner \u003d new Scanner(file)) {","lastModifiedDate":"2024-01-28"},{"lineNumber":226,"author":{"gitId":"ChuaZiLong"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":227,"author":{"gitId":"ChuaZiLong"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2024-01-28"},{"lineNumber":228,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2024-01-28"},{"lineNumber":229,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":230,"author":{"gitId":"ChuaZiLong"},"content":" // Expected format: Type | Done | Description | Additional Info","lastModifiedDate":"2024-01-28"},{"lineNumber":231,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d parts[0];","lastModifiedDate":"2024-01-28"},{"lineNumber":232,"author":{"gitId":"ChuaZiLong"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2024-01-28"},{"lineNumber":233,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[2];","lastModifiedDate":"2024-01-28"},{"lineNumber":234,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d null;","lastModifiedDate":"2024-01-28"},{"lineNumber":235,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":236,"author":{"gitId":"ChuaZiLong"},"content":" switch (type) {","lastModifiedDate":"2024-01-28"},{"lineNumber":237,"author":{"gitId":"ChuaZiLong"},"content":" case \"T\":","lastModifiedDate":"2024-01-28"},{"lineNumber":238,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2024-01-28"},{"lineNumber":239,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":240,"author":{"gitId":"ChuaZiLong"},"content":" case \"D\":","lastModifiedDate":"2024-01-28"},{"lineNumber":241,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 4) throw new DukeException(\"Invalid deadline format in file.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":242,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Deadline(description, parts[3]);","lastModifiedDate":"2024-01-28"},{"lineNumber":243,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":244,"author":{"gitId":"ChuaZiLong"},"content":" case \"E\":","lastModifiedDate":"2024-01-28"},{"lineNumber":245,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 5) throw new DukeException(\"Invalid event format in file.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":246,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Event(description, parts[3], parts[4]);","lastModifiedDate":"2024-01-28"},{"lineNumber":247,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":248,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":249,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":250,"author":{"gitId":"ChuaZiLong"},"content":" if (task !\u003d null) {","lastModifiedDate":"2024-01-28"},{"lineNumber":251,"author":{"gitId":"ChuaZiLong"},"content":" if (isDone) {","lastModifiedDate":"2024-01-28"},{"lineNumber":252,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-28"},{"lineNumber":253,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":254,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":255,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":256,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":257,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Skipping invalid task: \" + line);","lastModifiedDate":"2024-01-28"},{"lineNumber":258,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":259,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":260,"author":{"gitId":"ChuaZiLong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":261,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":262,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":263,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":264,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":265,"author":{"gitId":"ChuaZiLong"},"content":" private static void saveTasksToFile() {","lastModifiedDate":"2024-01-28"},{"lineNumber":266,"author":{"gitId":"ChuaZiLong"},"content":" try (PrintWriter writer \u003d new PrintWriter(FILE_PATH)) {","lastModifiedDate":"2024-01-28"},{"lineNumber":267,"author":{"gitId":"ChuaZiLong"},"content":" for (Task task : tasks) {","lastModifiedDate":"2024-01-28"},{"lineNumber":268,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d task instanceof Todo ? \"T\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":269,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Deadline ? \"D\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":270,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Event ? \"E\" : \"\";","lastModifiedDate":"2024-01-28"},{"lineNumber":271,"author":{"gitId":"ChuaZiLong"},"content":" String status \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2024-01-28"},{"lineNumber":272,"author":{"gitId":"ChuaZiLong"},"content":" String line \u003d type + \" | \" + status + \" | \" + task.getDescription();","lastModifiedDate":"2024-01-28"},{"lineNumber":273,"author":{"gitId":"ChuaZiLong"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2024-01-28"},{"lineNumber":274,"author":{"gitId":"ChuaZiLong"},"content":" line +\u003d \" | \" + ((Deadline) task).by;","lastModifiedDate":"2024-01-28"},{"lineNumber":275,"author":{"gitId":"ChuaZiLong"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2024-01-28"},{"lineNumber":276,"author":{"gitId":"ChuaZiLong"},"content":" line +\u003d \" | \" + ((Event) task).from + \" | \" + ((Event) task).to;","lastModifiedDate":"2024-01-28"},{"lineNumber":277,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":278,"author":{"gitId":"ChuaZiLong"},"content":" writer.println(line);","lastModifiedDate":"2024-01-28"},{"lineNumber":279,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":280,"author":{"gitId":"ChuaZiLong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":281,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Unable to save tasks: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":282,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":283,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":284,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":285,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":286,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":287,"author":{"gitId":"ChuaZiLong"},"content":" private static void deleteTask(String userInput) throws DukeException {","lastModifiedDate":"2024-01-24"},{"lineNumber":288,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":289,"author":{"gitId":"ChuaZiLong"},"content":" int taskIndex \u003d Integer.parseInt(userInput.substring(7).trim()) - 1;","lastModifiedDate":"2024-01-24"},{"lineNumber":290,"author":{"gitId":"ChuaZiLong"},"content":" if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":291,"author":{"gitId":"ChuaZiLong"},"content":" Task removedTask \u003d tasks.remove(taskIndex);","lastModifiedDate":"2024-01-24"},{"lineNumber":292,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":293,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + removedTask.getStatusIcon() + removedTask.getDescription());","lastModifiedDate":"2024-01-24"},{"lineNumber":294,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":295,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":296,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":297,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":298,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException | StringIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":299,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"OOPS!!! Invalid command format.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":300,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":301,"author":{"gitId":"ChuaZiLong"},"content":" saveTasksToFile();","lastModifiedDate":"2024-01-28"},{"lineNumber":302,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":303,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":304,"author":{"gitId":"ChuaZiLong"},"content":" private static void listTasks() {","lastModifiedDate":"2024-01-24"},{"lineNumber":305,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2024-01-24"},{"lineNumber":306,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":307,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":308,"author":{"gitId":"ChuaZiLong"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":309,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" No tasks yet.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":310,"author":{"gitId":"ChuaZiLong"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":311,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-24"},{"lineNumber":312,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + (i + 1) + \".\" + tasks.get(i).getStatusIcon() + tasks.get(i).getDescription());","lastModifiedDate":"2024-01-24"},{"lineNumber":313,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":314,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":315,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":316,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":317,"author":{"gitId":"ChuaZiLong"},"content":" private static void printTaskAddedMessage(Task task) {","lastModifiedDate":"2024-01-24"},{"lineNumber":318,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":319,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task.getStatusIcon() + task.getDescription());","lastModifiedDate":"2024-01-24"},{"lineNumber":320,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":321,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":322,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":323,"author":{"gitId":"ChuaZiLong"},"content":" private static boolean isValidTaskIndex(int index) {","lastModifiedDate":"2024-01-24"},{"lineNumber":324,"author":{"gitId":"ChuaZiLong"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size();","lastModifiedDate":"2024-01-24"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":326,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":327,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"-":5,"ChuaZiLong":322}}] +[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Date;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.File;","lastModifiedDate":"2024-01-28"},{"lineNumber":6,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-28"},{"lineNumber":11,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"ChuaZiLong"},"content":"class DukeException extends Exception {","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"ChuaZiLong"},"content":" public DukeException(String message) {","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"ChuaZiLong"},"content":" super(message);","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"ChuaZiLong"},"content":"class Ui {","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"ChuaZiLong"},"content":" private Scanner scanner;","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"ChuaZiLong"},"content":" public Ui() {","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"ChuaZiLong"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":26,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":27,"author":{"gitId":"ChuaZiLong"},"content":" public void showWelcome() {","lastModifiedDate":"2024-01-28"},{"lineNumber":28,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Hello! I\u0027m SCZL\");","lastModifiedDate":"2024-01-28"},{"lineNumber":29,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":32,"author":{"gitId":"ChuaZiLong"},"content":" public void showGoodbye() {","lastModifiedDate":"2024-01-28"},{"lineNumber":33,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-28"},{"lineNumber":34,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":35,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"ChuaZiLong"},"content":" public void showError(String message) {","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"ChuaZiLong"},"content":" public void showTaskAdded(Task task, int taskCount) {","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-28"},{"lineNumber":43,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"ChuaZiLong"},"content":" public void showTaskList(TaskList tasks) {","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println((i + 1) + \".\" + tasks.getTask(i));","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":52,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":53,"author":{"gitId":"ChuaZiLong"},"content":" public String readCommand() {","lastModifiedDate":"2024-01-28"},{"lineNumber":54,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"ChuaZiLong"},"content":" return scanner.nextLine();","lastModifiedDate":"2024-01-28"},{"lineNumber":56,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":57,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":58,"author":{"gitId":"ChuaZiLong"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-28"},{"lineNumber":59,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Error loading file.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":61,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":62,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":63,"author":{"gitId":"ChuaZiLong"},"content":" public void closeScanner() {","lastModifiedDate":"2024-01-28"},{"lineNumber":64,"author":{"gitId":"ChuaZiLong"},"content":" scanner.close();","lastModifiedDate":"2024-01-28"},{"lineNumber":65,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":66,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"ChuaZiLong"},"content":" public void showMarkedTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"ChuaZiLong"},"content":" public void showUnmarkedTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"ChuaZiLong"},"content":" public void showDeletedTask(Task task, int taskCount) {","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-28"},{"lineNumber":83,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":84,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":85,"author":{"gitId":"ChuaZiLong"},"content":"class Storage {","lastModifiedDate":"2024-01-28"},{"lineNumber":86,"author":{"gitId":"ChuaZiLong"},"content":" private String filePath;","lastModifiedDate":"2024-01-28"},{"lineNumber":87,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":88,"author":{"gitId":"ChuaZiLong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-28"},{"lineNumber":89,"author":{"gitId":"ChuaZiLong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-28"},{"lineNumber":90,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":91,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":92,"author":{"gitId":"ChuaZiLong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2024-01-28"},{"lineNumber":93,"author":{"gitId":"ChuaZiLong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-28"},{"lineNumber":94,"author":{"gitId":"ChuaZiLong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-28"},{"lineNumber":95,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":96,"author":{"gitId":"ChuaZiLong"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":97,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"File not found\");","lastModifiedDate":"2024-01-28"},{"lineNumber":98,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":99,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":100,"author":{"gitId":"ChuaZiLong"},"content":" try (Scanner fileScanner \u003d new Scanner(file)) {","lastModifiedDate":"2024-01-28"},{"lineNumber":101,"author":{"gitId":"ChuaZiLong"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":102,"author":{"gitId":"ChuaZiLong"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2024-01-28"},{"lineNumber":103,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2024-01-28"},{"lineNumber":104,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":105,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d parts[0];","lastModifiedDate":"2024-01-28"},{"lineNumber":106,"author":{"gitId":"ChuaZiLong"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2024-01-28"},{"lineNumber":107,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[2];","lastModifiedDate":"2024-01-28"},{"lineNumber":108,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d null;","lastModifiedDate":"2024-01-28"},{"lineNumber":109,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2024-01-28"},{"lineNumber":110,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":111,"author":{"gitId":"ChuaZiLong"},"content":" switch (type) {","lastModifiedDate":"2024-01-28"},{"lineNumber":112,"author":{"gitId":"ChuaZiLong"},"content":" case \"T\":","lastModifiedDate":"2024-01-28"},{"lineNumber":113,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2024-01-28"},{"lineNumber":114,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":115,"author":{"gitId":"ChuaZiLong"},"content":" case \"D\":","lastModifiedDate":"2024-01-28"},{"lineNumber":116,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 4) throw new DukeException(\"Invalid deadline format in file.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":117,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2024-01-28"},{"lineNumber":118,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2024-01-28"},{"lineNumber":119,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":120,"author":{"gitId":"ChuaZiLong"},"content":" case \"E\":","lastModifiedDate":"2024-01-28"},{"lineNumber":121,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 5) throw new DukeException(\"Invalid event format in file.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":122,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2024-01-28"},{"lineNumber":123,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime to \u003d LocalDateTime.parse(parts[4], formatter);","lastModifiedDate":"2024-01-28"},{"lineNumber":124,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2024-01-28"},{"lineNumber":125,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-28"},{"lineNumber":126,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":127,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":128,"author":{"gitId":"ChuaZiLong"},"content":" if (task !\u003d null) {","lastModifiedDate":"2024-01-28"},{"lineNumber":129,"author":{"gitId":"ChuaZiLong"},"content":" if (isDone) {","lastModifiedDate":"2024-01-28"},{"lineNumber":130,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-28"},{"lineNumber":131,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":132,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":133,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":134,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException | DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":135,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Skipping invalid task: \" + line);","lastModifiedDate":"2024-01-28"},{"lineNumber":136,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":137,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":138,"author":{"gitId":"ChuaZiLong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":139,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"File not found: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":140,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":141,"author":{"gitId":"ChuaZiLong"},"content":" return tasks;","lastModifiedDate":"2024-01-28"},{"lineNumber":142,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":143,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":144,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":145,"author":{"gitId":"ChuaZiLong"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2024-01-28"},{"lineNumber":146,"author":{"gitId":"ChuaZiLong"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2024-01-28"},{"lineNumber":147,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-28"},{"lineNumber":148,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2024-01-28"},{"lineNumber":149,"author":{"gitId":"ChuaZiLong"},"content":" writer.println(taskToFileString(task));","lastModifiedDate":"2024-01-28"},{"lineNumber":150,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":151,"author":{"gitId":"ChuaZiLong"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":152,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":153,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":154,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":155,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":156,"author":{"gitId":"ChuaZiLong"},"content":" private String taskToFileString(Task task) {","lastModifiedDate":"2024-01-28"},{"lineNumber":157,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d task instanceof Todo ? \"T\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":158,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Deadline ? \"D\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":159,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Event ? \"E\" : \"\";","lastModifiedDate":"2024-01-28"},{"lineNumber":160,"author":{"gitId":"ChuaZiLong"},"content":" String status \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2024-01-28"},{"lineNumber":161,"author":{"gitId":"ChuaZiLong"},"content":" String details \u003d task.getDescription();","lastModifiedDate":"2024-01-28"},{"lineNumber":162,"author":{"gitId":"ChuaZiLong"},"content":" String additionalInfo \u003d \"\";","lastModifiedDate":"2024-01-28"},{"lineNumber":163,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":164,"author":{"gitId":"ChuaZiLong"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2024-01-28"},{"lineNumber":165,"author":{"gitId":"ChuaZiLong"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2024-01-28"},{"lineNumber":166,"author":{"gitId":"ChuaZiLong"},"content":" additionalInfo \u003d \" | \" + deadline.getBy().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":167,"author":{"gitId":"ChuaZiLong"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2024-01-28"},{"lineNumber":168,"author":{"gitId":"ChuaZiLong"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2024-01-28"},{"lineNumber":169,"author":{"gitId":"ChuaZiLong"},"content":" additionalInfo \u003d \" | \" + event.getFrom().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) +","lastModifiedDate":"2024-01-28"},{"lineNumber":170,"author":{"gitId":"ChuaZiLong"},"content":" \" | \" + event.getTo().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":171,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":172,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":173,"author":{"gitId":"ChuaZiLong"},"content":" return type + \" | \" + status + \" | \" + details + additionalInfo;","lastModifiedDate":"2024-01-28"},{"lineNumber":174,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":175,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":176,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-28"},{"lineNumber":177,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":178,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":179,"author":{"gitId":"ChuaZiLong"},"content":"class Parser {","lastModifiedDate":"2024-01-28"},{"lineNumber":180,"author":{"gitId":"ChuaZiLong"},"content":" private static final DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-28"},{"lineNumber":181,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":182,"author":{"gitId":"ChuaZiLong"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2024-01-28"},{"lineNumber":183,"author":{"gitId":"ChuaZiLong"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2024-01-28"},{"lineNumber":184,"author":{"gitId":"ChuaZiLong"},"content":" String commandType \u003d commandParts[0];","lastModifiedDate":"2024-01-28"},{"lineNumber":185,"author":{"gitId":"ChuaZiLong"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2024-01-28"},{"lineNumber":186,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":187,"author":{"gitId":"ChuaZiLong"},"content":" switch (commandType) {","lastModifiedDate":"2024-01-28"},{"lineNumber":188,"author":{"gitId":"ChuaZiLong"},"content":" case \"todo\":","lastModifiedDate":"2024-01-28"},{"lineNumber":189,"author":{"gitId":"ChuaZiLong"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":190,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":191,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":192,"author":{"gitId":"ChuaZiLong"},"content":" return new AddTodoCommand(commandArgs);","lastModifiedDate":"2024-01-28"},{"lineNumber":193,"author":{"gitId":"ChuaZiLong"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-28"},{"lineNumber":194,"author":{"gitId":"ChuaZiLong"},"content":" return parseAddDeadlineCommand(commandArgs);","lastModifiedDate":"2024-01-28"},{"lineNumber":195,"author":{"gitId":"ChuaZiLong"},"content":" case \"event\":","lastModifiedDate":"2024-01-28"},{"lineNumber":196,"author":{"gitId":"ChuaZiLong"},"content":" return parseAddEventCommand(commandArgs);","lastModifiedDate":"2024-01-28"},{"lineNumber":197,"author":{"gitId":"ChuaZiLong"},"content":" case \"list\":","lastModifiedDate":"2024-01-28"},{"lineNumber":198,"author":{"gitId":"ChuaZiLong"},"content":" return new ListCommand();","lastModifiedDate":"2024-01-28"},{"lineNumber":199,"author":{"gitId":"ChuaZiLong"},"content":" case \"mark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":200,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":201,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":202,"author":{"gitId":"ChuaZiLong"},"content":" return new MarkCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":203,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":204,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":205,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":206,"author":{"gitId":"ChuaZiLong"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":207,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":208,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":209,"author":{"gitId":"ChuaZiLong"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":210,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":211,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":212,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":213,"author":{"gitId":"ChuaZiLong"},"content":" case \"delete\":","lastModifiedDate":"2024-01-30"},{"lineNumber":214,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":215,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":216,"author":{"gitId":"ChuaZiLong"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":217,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":218,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":219,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":220,"author":{"gitId":"ChuaZiLong"},"content":" case \"bye\":","lastModifiedDate":"2024-01-30"},{"lineNumber":221,"author":{"gitId":"ChuaZiLong"},"content":" return new ExitCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":222,"author":{"gitId":"ChuaZiLong"},"content":" default:","lastModifiedDate":"2024-01-28"},{"lineNumber":223,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Unknown command\");","lastModifiedDate":"2024-01-28"},{"lineNumber":224,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":225,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":226,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":227,"author":{"gitId":"ChuaZiLong"},"content":" private static Command parseAddDeadlineCommand(String commandArgs) throws DukeException {","lastModifiedDate":"2024-01-28"},{"lineNumber":228,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d commandArgs.split(\"/by\", 2);","lastModifiedDate":"2024-01-28"},{"lineNumber":229,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":230,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid deadline command format.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":231,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":232,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":233,"author":{"gitId":"ChuaZiLong"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":234,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":235,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(by, dateTimeFormatter);","lastModifiedDate":"2024-01-28"},{"lineNumber":236,"author":{"gitId":"ChuaZiLong"},"content":" return new AddDeadlineCommand(description, byDate);","lastModifiedDate":"2024-01-28"},{"lineNumber":237,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":238,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid date format. Please use yyyy-MM-dd HHmm format.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":239,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":240,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":241,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":242,"author":{"gitId":"ChuaZiLong"},"content":" private static Command parseAddEventCommand(String commandArgs) throws DukeException {","lastModifiedDate":"2024-01-28"},{"lineNumber":243,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d commandArgs.split(\"/at\", 2);","lastModifiedDate":"2024-01-28"},{"lineNumber":244,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":245,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid event command format.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":246,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":247,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":248,"author":{"gitId":"ChuaZiLong"},"content":" String at \u003d parts[1].trim();","lastModifiedDate":"2024-01-28"},{"lineNumber":249,"author":{"gitId":"ChuaZiLong"},"content":" String[] timeParts \u003d at.split(\"-\", 2);","lastModifiedDate":"2024-01-28"},{"lineNumber":250,"author":{"gitId":"ChuaZiLong"},"content":" if (timeParts.length \u003c 2 || timeParts[0].trim().isEmpty() || timeParts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-28"},{"lineNumber":251,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid time format for event command.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":252,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":253,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":254,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(timeParts[0].trim(), dateTimeFormatter);","lastModifiedDate":"2024-01-28"},{"lineNumber":255,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(timeParts[1].trim(), dateTimeFormatter);","lastModifiedDate":"2024-01-28"},{"lineNumber":256,"author":{"gitId":"ChuaZiLong"},"content":" return new AddEventCommand(description, startTime, endTime);","lastModifiedDate":"2024-01-28"},{"lineNumber":257,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":258,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid date format. Please use yyyy-MM-dd HHmm format.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":259,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":260,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":261,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-28"},{"lineNumber":262,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":263,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":264,"author":{"gitId":"ChuaZiLong"},"content":"class TaskList {","lastModifiedDate":"2024-01-28"},{"lineNumber":265,"author":{"gitId":"ChuaZiLong"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-28"},{"lineNumber":266,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":267,"author":{"gitId":"ChuaZiLong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-28"},{"lineNumber":268,"author":{"gitId":"ChuaZiLong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2024-01-28"},{"lineNumber":269,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":270,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":271,"author":{"gitId":"ChuaZiLong"},"content":" public TaskList() {","lastModifiedDate":"2024-01-28"},{"lineNumber":272,"author":{"gitId":"ChuaZiLong"},"content":" this(new ArrayList\u003c\u003e());","lastModifiedDate":"2024-01-28"},{"lineNumber":273,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":274,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":275,"author":{"gitId":"ChuaZiLong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2024-01-28"},{"lineNumber":276,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-28"},{"lineNumber":277,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":278,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":279,"author":{"gitId":"ChuaZiLong"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2024-01-28"},{"lineNumber":280,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.remove(index);","lastModifiedDate":"2024-01-28"},{"lineNumber":281,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":282,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":283,"author":{"gitId":"ChuaZiLong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2024-01-28"},{"lineNumber":284,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.get(index);","lastModifiedDate":"2024-01-28"},{"lineNumber":285,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":286,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":287,"author":{"gitId":"ChuaZiLong"},"content":" public int getSize() {","lastModifiedDate":"2024-01-28"},{"lineNumber":288,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.size();","lastModifiedDate":"2024-01-28"},{"lineNumber":289,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":290,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":291,"author":{"gitId":"ChuaZiLong"},"content":" // ... any other methods needed for task management ...","lastModifiedDate":"2024-01-28"},{"lineNumber":292,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-28"},{"lineNumber":293,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":294,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":295,"author":{"gitId":"ChuaZiLong"},"content":"enum TaskType {","lastModifiedDate":"2024-01-24"},{"lineNumber":296,"author":{"gitId":"ChuaZiLong"},"content":" TODO,","lastModifiedDate":"2024-01-24"},{"lineNumber":297,"author":{"gitId":"ChuaZiLong"},"content":" DEADLINE,","lastModifiedDate":"2024-01-24"},{"lineNumber":298,"author":{"gitId":"ChuaZiLong"},"content":" EVENT","lastModifiedDate":"2024-01-24"},{"lineNumber":299,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":300,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":301,"author":{"gitId":"ChuaZiLong"},"content":"class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":302,"author":{"gitId":"ChuaZiLong"},"content":" protected String description;","lastModifiedDate":"2024-01-24"},{"lineNumber":303,"author":{"gitId":"ChuaZiLong"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-24"},{"lineNumber":304,"author":{"gitId":"ChuaZiLong"},"content":" protected TaskType taskType;","lastModifiedDate":"2024-01-24"},{"lineNumber":305,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":306,"author":{"gitId":"ChuaZiLong"},"content":" public Task(String description, TaskType taskType) {","lastModifiedDate":"2024-01-24"},{"lineNumber":307,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-24"},{"lineNumber":308,"author":{"gitId":"ChuaZiLong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":309,"author":{"gitId":"ChuaZiLong"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2024-01-24"},{"lineNumber":310,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":311,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":312,"author":{"gitId":"ChuaZiLong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-24"},{"lineNumber":313,"author":{"gitId":"ChuaZiLong"},"content":" return \"[\" + taskType + \"]\" + (isDone ? \"[X] \" : \"[ ] \");","lastModifiedDate":"2024-01-24"},{"lineNumber":314,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":315,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":316,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-24"},{"lineNumber":317,"author":{"gitId":"ChuaZiLong"},"content":" return description;","lastModifiedDate":"2024-01-24"},{"lineNumber":318,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":319,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":320,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-24"},{"lineNumber":321,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":322,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":323,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":324,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsNotDone() {","lastModifiedDate":"2024-01-24"},{"lineNumber":325,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":326,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":327,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":328,"author":{"gitId":"ChuaZiLong"},"content":" public String toString() {","lastModifiedDate":"2024-01-28"},{"lineNumber":329,"author":{"gitId":"ChuaZiLong"},"content":" return getStatusIcon() + getDescription();","lastModifiedDate":"2024-01-28"},{"lineNumber":330,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":331,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":332,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":333,"author":{"gitId":"ChuaZiLong"},"content":"class Todo extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":334,"author":{"gitId":"ChuaZiLong"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-24"},{"lineNumber":335,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2024-01-24"},{"lineNumber":336,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":337,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":338,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":339,"author":{"gitId":"ChuaZiLong"},"content":"class Deadline extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":340,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime by;","lastModifiedDate":"2024-01-28"},{"lineNumber":341,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":342,"author":{"gitId":"ChuaZiLong"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-28"},{"lineNumber":343,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2024-01-24"},{"lineNumber":344,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-24"},{"lineNumber":345,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":346,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":347,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":348,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-24"},{"lineNumber":349,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-28"},{"lineNumber":350,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (by: \" + formatter.format(by) + \")\";","lastModifiedDate":"2024-01-28"},{"lineNumber":351,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":352,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2024-01-28"},{"lineNumber":353,"author":{"gitId":"ChuaZiLong"},"content":" return by;","lastModifiedDate":"2024-01-28"},{"lineNumber":354,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":355,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":356,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":357,"author":{"gitId":"ChuaZiLong"},"content":"class Event extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":358,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime from;","lastModifiedDate":"2024-01-28"},{"lineNumber":359,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime to;","lastModifiedDate":"2024-01-28"},{"lineNumber":360,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":361,"author":{"gitId":"ChuaZiLong"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2024-01-28"},{"lineNumber":362,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2024-01-24"},{"lineNumber":363,"author":{"gitId":"ChuaZiLong"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-24"},{"lineNumber":364,"author":{"gitId":"ChuaZiLong"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-24"},{"lineNumber":365,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":366,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":367,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":368,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-24"},{"lineNumber":369,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-28"},{"lineNumber":370,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (from: \" + formatter.format(from) + \" to: \" + formatter.format(to) + \")\";","lastModifiedDate":"2024-01-28"},{"lineNumber":371,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":372,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2024-01-28"},{"lineNumber":373,"author":{"gitId":"ChuaZiLong"},"content":" return from;","lastModifiedDate":"2024-01-28"},{"lineNumber":374,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":375,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2024-01-28"},{"lineNumber":376,"author":{"gitId":"ChuaZiLong"},"content":" return to;","lastModifiedDate":"2024-01-28"},{"lineNumber":377,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":378,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":379,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":380,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":381,"author":{"gitId":"ChuaZiLong"},"content":" private Storage storage;","lastModifiedDate":"2024-01-28"},{"lineNumber":382,"author":{"gitId":"ChuaZiLong"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-28"},{"lineNumber":383,"author":{"gitId":"ChuaZiLong"},"content":" private Ui ui;","lastModifiedDate":"2024-01-28"},{"lineNumber":384,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":385,"author":{"gitId":"ChuaZiLong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2024-01-28"},{"lineNumber":386,"author":{"gitId":"ChuaZiLong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2024-01-28"},{"lineNumber":387,"author":{"gitId":"ChuaZiLong"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-28"},{"lineNumber":388,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":389,"author":{"gitId":"ChuaZiLong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-28"},{"lineNumber":390,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":391,"author":{"gitId":"ChuaZiLong"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-28"},{"lineNumber":392,"author":{"gitId":"ChuaZiLong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-28"},{"lineNumber":393,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":394,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":395,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":396,"author":{"gitId":"ChuaZiLong"},"content":" public void run() {","lastModifiedDate":"2024-01-28"},{"lineNumber":397,"author":{"gitId":"ChuaZiLong"},"content":" ui.showWelcome();","lastModifiedDate":"2024-01-28"},{"lineNumber":398,"author":{"gitId":"ChuaZiLong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2024-01-28"},{"lineNumber":399,"author":{"gitId":"ChuaZiLong"},"content":" while (!isExit) {","lastModifiedDate":"2024-01-28"},{"lineNumber":400,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-28"},{"lineNumber":401,"author":{"gitId":"ChuaZiLong"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2024-01-28"},{"lineNumber":402,"author":{"gitId":"ChuaZiLong"},"content":" Command command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2024-01-30"},{"lineNumber":403,"author":{"gitId":"ChuaZiLong"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2024-01-30"},{"lineNumber":404,"author":{"gitId":"ChuaZiLong"},"content":" isExit \u003d command.isExit(); // Check if the command signals to exit","lastModifiedDate":"2024-01-30"},{"lineNumber":405,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":406,"author":{"gitId":"ChuaZiLong"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":407,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":408,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":409,"author":{"gitId":"ChuaZiLong"},"content":" ui.closeScanner();","lastModifiedDate":"2024-01-28"},{"lineNumber":410,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":411,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":412,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-28"},{"lineNumber":413,"author":{"gitId":"ChuaZiLong"},"content":" new Duke(\"./data/duke.txt/duke.txt\").run();","lastModifiedDate":"2024-01-28"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":415,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":416,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":417,"author":{"gitId":"ChuaZiLong"},"content":"abstract class Command {","lastModifiedDate":"2024-01-28"},{"lineNumber":418,"author":{"gitId":"ChuaZiLong"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2024-01-28"},{"lineNumber":419,"author":{"gitId":"ChuaZiLong"},"content":" public abstract boolean isExit();","lastModifiedDate":"2024-01-28"},{"lineNumber":420,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":421,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":422,"author":{"gitId":"ChuaZiLong"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":423,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":424,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":425,"author":{"gitId":"ChuaZiLong"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":426,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":427,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":428,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":429,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":430,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":431,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":432,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":433,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":434,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":435,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":436,"author":{"gitId":"ChuaZiLong"},"content":" ui.showMarkedTask(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":437,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":438,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":439,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":440,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":441,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":442,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":443,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":444,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":445,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":446,"author":{"gitId":"ChuaZiLong"},"content":"class UnmarkCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":447,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":448,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":449,"author":{"gitId":"ChuaZiLong"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":450,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":451,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":452,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":453,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":454,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":455,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":456,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":457,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":458,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":459,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsNotDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":460,"author":{"gitId":"ChuaZiLong"},"content":" ui.showUnmarkedTask(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":461,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":462,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":463,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":464,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":465,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":466,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":467,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":468,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":469,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":470,"author":{"gitId":"ChuaZiLong"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":471,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":472,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":473,"author":{"gitId":"ChuaZiLong"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":474,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":475,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":476,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":477,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":478,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":479,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":480,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":481,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":482,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.removeTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":483,"author":{"gitId":"ChuaZiLong"},"content":" ui.showDeletedTask(task, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":484,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":485,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":486,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":487,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":488,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":489,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":490,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":491,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":492,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":493,"author":{"gitId":"ChuaZiLong"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":494,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":495,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":496,"author":{"gitId":"ChuaZiLong"},"content":" ui.showGoodbye();","lastModifiedDate":"2024-01-30"},{"lineNumber":497,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":498,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":499,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":500,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":501,"author":{"gitId":"ChuaZiLong"},"content":" return true; // Indicate that the application should exit","lastModifiedDate":"2024-01-30"},{"lineNumber":502,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":503,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":504,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":505,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":506,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":507,"author":{"gitId":"ChuaZiLong"},"content":"class ListCommand extends Command {","lastModifiedDate":"2024-01-28"},{"lineNumber":508,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":509,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-28"},{"lineNumber":510,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2024-01-28"},{"lineNumber":511,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":512,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-28"},{"lineNumber":513,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-28"},{"lineNumber":514,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":515,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":516,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":517,"author":{"gitId":"ChuaZiLong"},"content":"class AddTodoCommand extends Command {","lastModifiedDate":"2024-01-28"},{"lineNumber":518,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-28"},{"lineNumber":519,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":520,"author":{"gitId":"ChuaZiLong"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2024-01-28"},{"lineNumber":521,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-28"},{"lineNumber":522,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":523,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":524,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":525,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-28"},{"lineNumber":526,"author":{"gitId":"ChuaZiLong"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2024-01-28"},{"lineNumber":527,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newTodo);","lastModifiedDate":"2024-01-28"},{"lineNumber":528,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newTodo, tasks.getSize());","lastModifiedDate":"2024-01-28"},{"lineNumber":529,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-28"},{"lineNumber":530,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":531,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":532,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":533,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-28"},{"lineNumber":534,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-28"},{"lineNumber":535,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":536,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-28"},{"lineNumber":537,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":538,"author":{"gitId":"ChuaZiLong"},"content":"class AddDeadlineCommand extends Command {","lastModifiedDate":"2024-01-28"},{"lineNumber":539,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-28"},{"lineNumber":540,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime by;","lastModifiedDate":"2024-01-28"},{"lineNumber":541,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":542,"author":{"gitId":"ChuaZiLong"},"content":" public AddDeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-28"},{"lineNumber":543,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-28"},{"lineNumber":544,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-28"},{"lineNumber":545,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":546,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":547,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":548,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-28"},{"lineNumber":549,"author":{"gitId":"ChuaZiLong"},"content":" Deadline newDeadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-28"},{"lineNumber":550,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newDeadline);","lastModifiedDate":"2024-01-28"},{"lineNumber":551,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newDeadline, tasks.getSize());","lastModifiedDate":"2024-01-28"},{"lineNumber":552,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-28"},{"lineNumber":553,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":554,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":555,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":556,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-28"},{"lineNumber":557,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-28"},{"lineNumber":558,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":559,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-24"},{"lineNumber":560,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":561,"author":{"gitId":"ChuaZiLong"},"content":"class AddEventCommand extends Command {","lastModifiedDate":"2024-01-28"},{"lineNumber":562,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-28"},{"lineNumber":563,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime start;","lastModifiedDate":"2024-01-28"},{"lineNumber":564,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime end;","lastModifiedDate":"2024-01-28"},{"lineNumber":565,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":566,"author":{"gitId":"ChuaZiLong"},"content":" public AddEventCommand(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2024-01-28"},{"lineNumber":567,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-28"},{"lineNumber":568,"author":{"gitId":"ChuaZiLong"},"content":" this.start \u003d start;","lastModifiedDate":"2024-01-28"},{"lineNumber":569,"author":{"gitId":"ChuaZiLong"},"content":" this.end \u003d end;","lastModifiedDate":"2024-01-28"},{"lineNumber":570,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":571,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":572,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":573,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-28"},{"lineNumber":574,"author":{"gitId":"ChuaZiLong"},"content":" Event newEvent \u003d new Event(description, start, end);","lastModifiedDate":"2024-01-28"},{"lineNumber":575,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newEvent);","lastModifiedDate":"2024-01-28"},{"lineNumber":576,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newEvent, tasks.getSize());","lastModifiedDate":"2024-01-28"},{"lineNumber":577,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-28"},{"lineNumber":578,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":579,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":580,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-28"},{"lineNumber":581,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-28"},{"lineNumber":582,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-28"},{"lineNumber":583,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":584,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":5,"ChuaZiLong":579}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChuaZiLong"},"content":"package duke;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Date;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.File;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"ChuaZiLong"},"content":"public class Duke {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"ChuaZiLong"},"content":" private Storage storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"ChuaZiLong"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"ChuaZiLong"},"content":" private Ui ui;","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"ChuaZiLong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"ChuaZiLong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"ChuaZiLong"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"ChuaZiLong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"ChuaZiLong"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"ChuaZiLong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"ChuaZiLong"},"content":" public void run() {","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"ChuaZiLong"},"content":" ui.showWelcome();","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"ChuaZiLong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"ChuaZiLong"},"content":" while (!isExit) {","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"ChuaZiLong"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"ChuaZiLong"},"content":" Command command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"ChuaZiLong"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"ChuaZiLong"},"content":" isExit \u003d command.isExit(); // Check if the command signals to exit","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"ChuaZiLong"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"ChuaZiLong"},"content":" ui.closeScanner();","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"ChuaZiLong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"ChuaZiLong"},"content":" new Duke(\"./data/duke.txt/duke.txt\").run();","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"ChuaZiLong"},"content":"class DukeException extends Exception {","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"ChuaZiLong"},"content":" public DukeException(String message) {","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"ChuaZiLong"},"content":" super(message);","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"ChuaZiLong"},"content":"class Ui {","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"ChuaZiLong"},"content":" private Scanner scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"ChuaZiLong"},"content":" public Ui() {","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"ChuaZiLong"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"ChuaZiLong"},"content":" public void showWelcome() {","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Hello! I\u0027m SCZL\");","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"ChuaZiLong"},"content":" public void showGoodbye() {","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"ChuaZiLong"},"content":" public void showError(String message) {","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"ChuaZiLong"},"content":" public void showTaskAdded(Task task, int taskCount) {","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"ChuaZiLong"},"content":" public void showTaskList(TaskList tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println((i + 1) + \".\" + tasks.getTask(i));","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":94,"author":{"gitId":"ChuaZiLong"},"content":" public String readCommand() {","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"ChuaZiLong"},"content":" return scanner.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"ChuaZiLong"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":101,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Error loading file.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":102,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":103,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":104,"author":{"gitId":"ChuaZiLong"},"content":" public void closeScanner() {","lastModifiedDate":"2024-01-30"},{"lineNumber":105,"author":{"gitId":"ChuaZiLong"},"content":" scanner.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":106,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":107,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":108,"author":{"gitId":"ChuaZiLong"},"content":" public void showMarkedTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":109,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":111,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":113,"author":{"gitId":"ChuaZiLong"},"content":" public void showUnmarkedTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":115,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":116,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":117,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":118,"author":{"gitId":"ChuaZiLong"},"content":" public void showDeletedTask(Task task, int taskCount) {","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":120,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":121,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":122,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":123,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":124,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":125,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":126,"author":{"gitId":"ChuaZiLong"},"content":"class Storage {","lastModifiedDate":"2024-01-30"},{"lineNumber":127,"author":{"gitId":"ChuaZiLong"},"content":" private String filePath;","lastModifiedDate":"2024-01-30"},{"lineNumber":128,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":129,"author":{"gitId":"ChuaZiLong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-30"},{"lineNumber":130,"author":{"gitId":"ChuaZiLong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-30"},{"lineNumber":131,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":132,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":133,"author":{"gitId":"ChuaZiLong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":134,"author":{"gitId":"ChuaZiLong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":135,"author":{"gitId":"ChuaZiLong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":136,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":137,"author":{"gitId":"ChuaZiLong"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":138,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"File not found\");","lastModifiedDate":"2024-01-30"},{"lineNumber":139,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":140,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":141,"author":{"gitId":"ChuaZiLong"},"content":" try (Scanner fileScanner \u003d new Scanner(file)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":142,"author":{"gitId":"ChuaZiLong"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":143,"author":{"gitId":"ChuaZiLong"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":144,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2024-01-30"},{"lineNumber":145,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":146,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d parts[0];","lastModifiedDate":"2024-01-30"},{"lineNumber":147,"author":{"gitId":"ChuaZiLong"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2024-01-30"},{"lineNumber":148,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[2];","lastModifiedDate":"2024-01-30"},{"lineNumber":149,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d null;","lastModifiedDate":"2024-01-30"},{"lineNumber":150,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":151,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":152,"author":{"gitId":"ChuaZiLong"},"content":" switch (type) {","lastModifiedDate":"2024-01-30"},{"lineNumber":153,"author":{"gitId":"ChuaZiLong"},"content":" case \"T\":","lastModifiedDate":"2024-01-30"},{"lineNumber":154,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2024-01-30"},{"lineNumber":155,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":156,"author":{"gitId":"ChuaZiLong"},"content":" case \"D\":","lastModifiedDate":"2024-01-30"},{"lineNumber":157,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 4) throw new DukeException(\"Invalid deadline format in file.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":158,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":159,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2024-01-30"},{"lineNumber":160,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":161,"author":{"gitId":"ChuaZiLong"},"content":" case \"E\":","lastModifiedDate":"2024-01-30"},{"lineNumber":162,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 5) throw new DukeException(\"Invalid event format in file.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":163,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":164,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime to \u003d LocalDateTime.parse(parts[4], formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":165,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2024-01-30"},{"lineNumber":166,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":167,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":168,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":169,"author":{"gitId":"ChuaZiLong"},"content":" if (task !\u003d null) {","lastModifiedDate":"2024-01-30"},{"lineNumber":170,"author":{"gitId":"ChuaZiLong"},"content":" if (isDone) {","lastModifiedDate":"2024-01-30"},{"lineNumber":171,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":172,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":173,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":174,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":175,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException | DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":176,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Skipping invalid task: \" + line);","lastModifiedDate":"2024-01-30"},{"lineNumber":177,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":178,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":179,"author":{"gitId":"ChuaZiLong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":180,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"File not found: \" + e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":181,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":182,"author":{"gitId":"ChuaZiLong"},"content":" return tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":183,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":184,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":185,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":186,"author":{"gitId":"ChuaZiLong"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":187,"author":{"gitId":"ChuaZiLong"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2024-01-30"},{"lineNumber":188,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":189,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2024-01-30"},{"lineNumber":190,"author":{"gitId":"ChuaZiLong"},"content":" writer.println(taskToFileString(task));","lastModifiedDate":"2024-01-30"},{"lineNumber":191,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":192,"author":{"gitId":"ChuaZiLong"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":193,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":194,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":195,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":196,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":197,"author":{"gitId":"ChuaZiLong"},"content":" private String taskToFileString(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":198,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d task instanceof Todo ? \"T\" :","lastModifiedDate":"2024-01-30"},{"lineNumber":199,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Deadline ? \"D\" :","lastModifiedDate":"2024-01-30"},{"lineNumber":200,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Event ? \"E\" : \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":201,"author":{"gitId":"ChuaZiLong"},"content":" String status \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2024-01-30"},{"lineNumber":202,"author":{"gitId":"ChuaZiLong"},"content":" String details \u003d task.getDescription();","lastModifiedDate":"2024-01-30"},{"lineNumber":203,"author":{"gitId":"ChuaZiLong"},"content":" String additionalInfo \u003d \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":204,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":205,"author":{"gitId":"ChuaZiLong"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2024-01-30"},{"lineNumber":206,"author":{"gitId":"ChuaZiLong"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2024-01-30"},{"lineNumber":207,"author":{"gitId":"ChuaZiLong"},"content":" additionalInfo \u003d \" | \" + deadline.getBy().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2024-01-30"},{"lineNumber":208,"author":{"gitId":"ChuaZiLong"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2024-01-30"},{"lineNumber":209,"author":{"gitId":"ChuaZiLong"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2024-01-30"},{"lineNumber":210,"author":{"gitId":"ChuaZiLong"},"content":" additionalInfo \u003d \" | \" + event.getFrom().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) +","lastModifiedDate":"2024-01-30"},{"lineNumber":211,"author":{"gitId":"ChuaZiLong"},"content":" \" | \" + event.getTo().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2024-01-30"},{"lineNumber":212,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":213,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":214,"author":{"gitId":"ChuaZiLong"},"content":" return type + \" | \" + status + \" | \" + details + additionalInfo;","lastModifiedDate":"2024-01-30"},{"lineNumber":215,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":216,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":217,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":218,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":219,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":220,"author":{"gitId":"ChuaZiLong"},"content":"class Parser {","lastModifiedDate":"2024-01-30"},{"lineNumber":221,"author":{"gitId":"ChuaZiLong"},"content":" private static final DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":222,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":223,"author":{"gitId":"ChuaZiLong"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":224,"author":{"gitId":"ChuaZiLong"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":225,"author":{"gitId":"ChuaZiLong"},"content":" String commandType \u003d commandParts[0];","lastModifiedDate":"2024-01-30"},{"lineNumber":226,"author":{"gitId":"ChuaZiLong"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":227,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":228,"author":{"gitId":"ChuaZiLong"},"content":" switch (commandType) {","lastModifiedDate":"2024-01-30"},{"lineNumber":229,"author":{"gitId":"ChuaZiLong"},"content":" case \"todo\":","lastModifiedDate":"2024-01-30"},{"lineNumber":230,"author":{"gitId":"ChuaZiLong"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":231,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":232,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":233,"author":{"gitId":"ChuaZiLong"},"content":" return new AddTodoCommand(commandArgs);","lastModifiedDate":"2024-01-30"},{"lineNumber":234,"author":{"gitId":"ChuaZiLong"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-30"},{"lineNumber":235,"author":{"gitId":"ChuaZiLong"},"content":" return parseAddDeadlineCommand(commandArgs);","lastModifiedDate":"2024-01-30"},{"lineNumber":236,"author":{"gitId":"ChuaZiLong"},"content":" case \"event\":","lastModifiedDate":"2024-01-30"},{"lineNumber":237,"author":{"gitId":"ChuaZiLong"},"content":" return parseAddEventCommand(commandArgs);","lastModifiedDate":"2024-01-30"},{"lineNumber":238,"author":{"gitId":"ChuaZiLong"},"content":" case \"list\":","lastModifiedDate":"2024-01-30"},{"lineNumber":239,"author":{"gitId":"ChuaZiLong"},"content":" return new ListCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":240,"author":{"gitId":"ChuaZiLong"},"content":" case \"mark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":241,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":242,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":243,"author":{"gitId":"ChuaZiLong"},"content":" return new MarkCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":244,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":245,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":246,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":247,"author":{"gitId":"ChuaZiLong"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":248,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":249,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":250,"author":{"gitId":"ChuaZiLong"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":251,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":252,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":253,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":254,"author":{"gitId":"ChuaZiLong"},"content":" case \"delete\":","lastModifiedDate":"2024-01-30"},{"lineNumber":255,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":256,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":257,"author":{"gitId":"ChuaZiLong"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":258,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":259,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":260,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":261,"author":{"gitId":"ChuaZiLong"},"content":" case \"bye\":","lastModifiedDate":"2024-01-30"},{"lineNumber":262,"author":{"gitId":"ChuaZiLong"},"content":" return new ExitCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":263,"author":{"gitId":"ChuaZiLong"},"content":" default:","lastModifiedDate":"2024-01-30"},{"lineNumber":264,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Unknown command\");","lastModifiedDate":"2024-01-30"},{"lineNumber":265,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":266,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":267,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":268,"author":{"gitId":"ChuaZiLong"},"content":" private static Command parseAddDeadlineCommand(String commandArgs) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":269,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d commandArgs.split(\"/by\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":270,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":271,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid deadline command format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":272,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":273,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":274,"author":{"gitId":"ChuaZiLong"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":275,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":276,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(by, dateTimeFormatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":277,"author":{"gitId":"ChuaZiLong"},"content":" return new AddDeadlineCommand(description, byDate);","lastModifiedDate":"2024-01-30"},{"lineNumber":278,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":279,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid date format. Please use yyyy-MM-dd HHmm format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":280,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":281,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":282,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":283,"author":{"gitId":"ChuaZiLong"},"content":" private static Command parseAddEventCommand(String commandArgs) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":284,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d commandArgs.split(\"/at\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":285,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":286,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid event command format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":287,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":288,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":289,"author":{"gitId":"ChuaZiLong"},"content":" String at \u003d parts[1].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":290,"author":{"gitId":"ChuaZiLong"},"content":" String[] timeParts \u003d at.split(\"-\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":291,"author":{"gitId":"ChuaZiLong"},"content":" if (timeParts.length \u003c 2 || timeParts[0].trim().isEmpty() || timeParts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":292,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid time format for event command.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":293,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":294,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":295,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(timeParts[0].trim(), dateTimeFormatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":296,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(timeParts[1].trim(), dateTimeFormatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":297,"author":{"gitId":"ChuaZiLong"},"content":" return new AddEventCommand(description, startTime, endTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":298,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":299,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid date format. Please use yyyy-MM-dd HHmm format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":300,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":301,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":302,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":303,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":304,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":305,"author":{"gitId":"ChuaZiLong"},"content":"class TaskList {","lastModifiedDate":"2024-01-30"},{"lineNumber":306,"author":{"gitId":"ChuaZiLong"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":307,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":308,"author":{"gitId":"ChuaZiLong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":309,"author":{"gitId":"ChuaZiLong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":310,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":311,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":312,"author":{"gitId":"ChuaZiLong"},"content":" public TaskList() {","lastModifiedDate":"2024-01-30"},{"lineNumber":313,"author":{"gitId":"ChuaZiLong"},"content":" this(new ArrayList\u003c\u003e());","lastModifiedDate":"2024-01-30"},{"lineNumber":314,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":315,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":316,"author":{"gitId":"ChuaZiLong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":317,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":318,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":319,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":320,"author":{"gitId":"ChuaZiLong"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":321,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.remove(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":322,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":323,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":324,"author":{"gitId":"ChuaZiLong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":325,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.get(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":326,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":327,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":328,"author":{"gitId":"ChuaZiLong"},"content":" public int getSize() {","lastModifiedDate":"2024-01-30"},{"lineNumber":329,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.size();","lastModifiedDate":"2024-01-30"},{"lineNumber":330,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":331,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":332,"author":{"gitId":"ChuaZiLong"},"content":" // ... any other methods needed for task management ...","lastModifiedDate":"2024-01-30"},{"lineNumber":333,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":334,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":335,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":336,"author":{"gitId":"ChuaZiLong"},"content":"enum TaskType {","lastModifiedDate":"2024-01-30"},{"lineNumber":337,"author":{"gitId":"ChuaZiLong"},"content":" TODO,","lastModifiedDate":"2024-01-30"},{"lineNumber":338,"author":{"gitId":"ChuaZiLong"},"content":" DEADLINE,","lastModifiedDate":"2024-01-30"},{"lineNumber":339,"author":{"gitId":"ChuaZiLong"},"content":" EVENT","lastModifiedDate":"2024-01-30"},{"lineNumber":340,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":341,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":342,"author":{"gitId":"ChuaZiLong"},"content":"class Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":343,"author":{"gitId":"ChuaZiLong"},"content":" protected String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":344,"author":{"gitId":"ChuaZiLong"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-30"},{"lineNumber":345,"author":{"gitId":"ChuaZiLong"},"content":" protected TaskType taskType;","lastModifiedDate":"2024-01-30"},{"lineNumber":346,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":347,"author":{"gitId":"ChuaZiLong"},"content":" public Task(String description, TaskType taskType) {","lastModifiedDate":"2024-01-30"},{"lineNumber":348,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":349,"author":{"gitId":"ChuaZiLong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":350,"author":{"gitId":"ChuaZiLong"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2024-01-30"},{"lineNumber":351,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":352,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":353,"author":{"gitId":"ChuaZiLong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-30"},{"lineNumber":354,"author":{"gitId":"ChuaZiLong"},"content":" return \"[\" + taskType + \"]\" + (isDone ? \"[X] \" : \"[ ] \");","lastModifiedDate":"2024-01-30"},{"lineNumber":355,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":356,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":357,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-30"},{"lineNumber":358,"author":{"gitId":"ChuaZiLong"},"content":" return description;","lastModifiedDate":"2024-01-30"},{"lineNumber":359,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":360,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":361,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-30"},{"lineNumber":362,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-30"},{"lineNumber":363,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":364,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":365,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsNotDone() {","lastModifiedDate":"2024-01-30"},{"lineNumber":366,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":367,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":368,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":369,"author":{"gitId":"ChuaZiLong"},"content":" public String toString() {","lastModifiedDate":"2024-01-30"},{"lineNumber":370,"author":{"gitId":"ChuaZiLong"},"content":" return getStatusIcon() + getDescription();","lastModifiedDate":"2024-01-30"},{"lineNumber":371,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":372,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":373,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":374,"author":{"gitId":"ChuaZiLong"},"content":"class Todo extends Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":375,"author":{"gitId":"ChuaZiLong"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-30"},{"lineNumber":376,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2024-01-30"},{"lineNumber":377,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":378,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":379,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":380,"author":{"gitId":"ChuaZiLong"},"content":"class Deadline extends Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":381,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime by;","lastModifiedDate":"2024-01-30"},{"lineNumber":382,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":383,"author":{"gitId":"ChuaZiLong"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-30"},{"lineNumber":384,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2024-01-30"},{"lineNumber":385,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-30"},{"lineNumber":386,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":387,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":388,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":389,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-30"},{"lineNumber":390,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":391,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (by: \" + formatter.format(by) + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":392,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":393,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2024-01-30"},{"lineNumber":394,"author":{"gitId":"ChuaZiLong"},"content":" return by;","lastModifiedDate":"2024-01-30"},{"lineNumber":395,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":396,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":397,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":398,"author":{"gitId":"ChuaZiLong"},"content":"class Event extends Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":399,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime from;","lastModifiedDate":"2024-01-30"},{"lineNumber":400,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime to;","lastModifiedDate":"2024-01-30"},{"lineNumber":401,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":402,"author":{"gitId":"ChuaZiLong"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2024-01-30"},{"lineNumber":403,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2024-01-30"},{"lineNumber":404,"author":{"gitId":"ChuaZiLong"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-30"},{"lineNumber":405,"author":{"gitId":"ChuaZiLong"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-30"},{"lineNumber":406,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":407,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":408,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":409,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-30"},{"lineNumber":410,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":411,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (from: \" + formatter.format(from) + \" to: \" + formatter.format(to) + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":412,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":413,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2024-01-30"},{"lineNumber":414,"author":{"gitId":"ChuaZiLong"},"content":" return from;","lastModifiedDate":"2024-01-30"},{"lineNumber":415,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":416,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2024-01-30"},{"lineNumber":417,"author":{"gitId":"ChuaZiLong"},"content":" return to;","lastModifiedDate":"2024-01-30"},{"lineNumber":418,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":419,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":420,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":421,"author":{"gitId":"ChuaZiLong"},"content":"abstract class Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":422,"author":{"gitId":"ChuaZiLong"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2024-01-30"},{"lineNumber":423,"author":{"gitId":"ChuaZiLong"},"content":" public abstract boolean isExit();","lastModifiedDate":"2024-01-30"},{"lineNumber":424,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":425,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":426,"author":{"gitId":"ChuaZiLong"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":427,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":428,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":429,"author":{"gitId":"ChuaZiLong"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":430,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":431,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":432,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":433,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":434,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":435,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":436,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":437,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":438,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":439,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":440,"author":{"gitId":"ChuaZiLong"},"content":" ui.showMarkedTask(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":441,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":442,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":443,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":444,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":445,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":446,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":447,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":448,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":449,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":450,"author":{"gitId":"ChuaZiLong"},"content":"class UnmarkCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":451,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":452,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":453,"author":{"gitId":"ChuaZiLong"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":454,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":455,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":456,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":457,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":458,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":459,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":460,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":461,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":462,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":463,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsNotDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":464,"author":{"gitId":"ChuaZiLong"},"content":" ui.showUnmarkedTask(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":465,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":466,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":467,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":468,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":469,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":470,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":471,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":472,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":473,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":474,"author":{"gitId":"ChuaZiLong"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":475,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":476,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":477,"author":{"gitId":"ChuaZiLong"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":478,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":479,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":480,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":481,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":482,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":483,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":484,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":485,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":486,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.removeTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":487,"author":{"gitId":"ChuaZiLong"},"content":" ui.showDeletedTask(task, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":488,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":489,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":490,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":491,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":492,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":493,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":494,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":495,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":496,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":497,"author":{"gitId":"ChuaZiLong"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":498,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":499,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":500,"author":{"gitId":"ChuaZiLong"},"content":" ui.showGoodbye();","lastModifiedDate":"2024-01-30"},{"lineNumber":501,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":502,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":503,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":504,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":505,"author":{"gitId":"ChuaZiLong"},"content":" return true; // Indicate that the application should exit","lastModifiedDate":"2024-01-30"},{"lineNumber":506,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":507,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":508,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":509,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":510,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":511,"author":{"gitId":"ChuaZiLong"},"content":"class ListCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":512,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":513,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":514,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":515,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":516,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":517,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":518,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":519,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":520,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":521,"author":{"gitId":"ChuaZiLong"},"content":"class AddTodoCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":522,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":523,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":524,"author":{"gitId":"ChuaZiLong"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2024-01-30"},{"lineNumber":525,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":526,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":527,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":528,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":529,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":530,"author":{"gitId":"ChuaZiLong"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2024-01-30"},{"lineNumber":531,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newTodo);","lastModifiedDate":"2024-01-30"},{"lineNumber":532,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newTodo, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":533,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":534,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":535,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":536,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":537,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":538,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":539,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":540,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":541,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":542,"author":{"gitId":"ChuaZiLong"},"content":"class AddDeadlineCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":543,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":544,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime by;","lastModifiedDate":"2024-01-30"},{"lineNumber":545,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":546,"author":{"gitId":"ChuaZiLong"},"content":" public AddDeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-30"},{"lineNumber":547,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":548,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-30"},{"lineNumber":549,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":550,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":551,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":552,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":553,"author":{"gitId":"ChuaZiLong"},"content":" Deadline newDeadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-30"},{"lineNumber":554,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newDeadline);","lastModifiedDate":"2024-01-30"},{"lineNumber":555,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newDeadline, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":556,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":557,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":558,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":559,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":560,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":561,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":562,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":563,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":564,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":565,"author":{"gitId":"ChuaZiLong"},"content":"class AddEventCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":566,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":567,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime start;","lastModifiedDate":"2024-01-30"},{"lineNumber":568,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime end;","lastModifiedDate":"2024-01-30"},{"lineNumber":569,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":570,"author":{"gitId":"ChuaZiLong"},"content":" public AddEventCommand(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2024-01-30"},{"lineNumber":571,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":572,"author":{"gitId":"ChuaZiLong"},"content":" this.start \u003d start;","lastModifiedDate":"2024-01-30"},{"lineNumber":573,"author":{"gitId":"ChuaZiLong"},"content":" this.end \u003d end;","lastModifiedDate":"2024-01-30"},{"lineNumber":574,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":575,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":576,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":577,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":578,"author":{"gitId":"ChuaZiLong"},"content":" Event newEvent \u003d new Event(description, start, end);","lastModifiedDate":"2024-01-30"},{"lineNumber":579,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newEvent);","lastModifiedDate":"2024-01-30"},{"lineNumber":580,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newEvent, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":581,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":582,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":583,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":584,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":585,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":586,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":587,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":588,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"ChuaZiLong":588}},{"path":"src/src/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChuaZiLong"},"content":"package src.duke;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Date;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"ChuaZiLong"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.File;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.PrintWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"ChuaZiLong"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"ChuaZiLong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"ChuaZiLong"},"content":"public class Duke {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"ChuaZiLong"},"content":" private Storage storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"ChuaZiLong"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"ChuaZiLong"},"content":" private Ui ui;","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"ChuaZiLong"},"content":" public Duke(String filePath) {","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"ChuaZiLong"},"content":" ui \u003d new Ui();","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"ChuaZiLong"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"ChuaZiLong"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"ChuaZiLong"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"ChuaZiLong"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"ChuaZiLong"},"content":" public void run() {","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"ChuaZiLong"},"content":" ui.showWelcome();","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"ChuaZiLong"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"ChuaZiLong"},"content":" while (!isExit) {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"ChuaZiLong"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"ChuaZiLong"},"content":" Command command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"ChuaZiLong"},"content":" command.execute(tasks, ui, storage);","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"ChuaZiLong"},"content":" isExit \u003d command.isExit(); // Check if the command signals to exit","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"ChuaZiLong"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"ChuaZiLong"},"content":" ui.closeScanner();","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"ChuaZiLong"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"ChuaZiLong"},"content":" new Duke(\"./data/duke.txt/duke.txt\").run();","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"ChuaZiLong"},"content":"class DukeException extends Exception {","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"ChuaZiLong"},"content":" public DukeException(String message) {","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"ChuaZiLong"},"content":" super(message);","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"ChuaZiLong"},"content":"class Ui {","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"ChuaZiLong"},"content":" private Scanner scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"ChuaZiLong"},"content":" public Ui() {","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"ChuaZiLong"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"ChuaZiLong"},"content":" public void showWelcome() {","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Hello! I\u0027m SCZL\");","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"ChuaZiLong"},"content":" public void showGoodbye() {","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"ChuaZiLong"},"content":" public void showError(String message) {","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"ChuaZiLong"},"content":" public void showTaskAdded(Task task, int taskCount) {","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"ChuaZiLong"},"content":" public void showTaskList(TaskList tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println((i + 1) + \".\" + tasks.getTask(i));","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"ChuaZiLong"},"content":" public String readCommand() {","lastModifiedDate":"2024-01-30"},{"lineNumber":94,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"ChuaZiLong"},"content":" return scanner.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"ChuaZiLong"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Error loading file.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":101,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":102,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":103,"author":{"gitId":"ChuaZiLong"},"content":" public void closeScanner() {","lastModifiedDate":"2024-01-30"},{"lineNumber":104,"author":{"gitId":"ChuaZiLong"},"content":" scanner.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":105,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":106,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":107,"author":{"gitId":"ChuaZiLong"},"content":" public void showMarkedTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":108,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":109,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":111,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"ChuaZiLong"},"content":" public void showUnmarkedTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":113,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":115,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":116,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":117,"author":{"gitId":"ChuaZiLong"},"content":" public void showDeletedTask(Task task, int taskCount) {","lastModifiedDate":"2024-01-30"},{"lineNumber":118,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2024-01-30"},{"lineNumber":120,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":121,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":122,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":123,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":124,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":125,"author":{"gitId":"ChuaZiLong"},"content":"class Storage {","lastModifiedDate":"2024-01-30"},{"lineNumber":126,"author":{"gitId":"ChuaZiLong"},"content":" private String filePath;","lastModifiedDate":"2024-01-30"},{"lineNumber":127,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":128,"author":{"gitId":"ChuaZiLong"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-30"},{"lineNumber":129,"author":{"gitId":"ChuaZiLong"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-30"},{"lineNumber":130,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":131,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":132,"author":{"gitId":"ChuaZiLong"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":133,"author":{"gitId":"ChuaZiLong"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":134,"author":{"gitId":"ChuaZiLong"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":135,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":136,"author":{"gitId":"ChuaZiLong"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":137,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"File not found\");","lastModifiedDate":"2024-01-30"},{"lineNumber":138,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":139,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":140,"author":{"gitId":"ChuaZiLong"},"content":" try (Scanner fileScanner \u003d new Scanner(file)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":141,"author":{"gitId":"ChuaZiLong"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":142,"author":{"gitId":"ChuaZiLong"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":143,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2024-01-30"},{"lineNumber":144,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":145,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d parts[0];","lastModifiedDate":"2024-01-30"},{"lineNumber":146,"author":{"gitId":"ChuaZiLong"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2024-01-30"},{"lineNumber":147,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[2];","lastModifiedDate":"2024-01-30"},{"lineNumber":148,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d null;","lastModifiedDate":"2024-01-30"},{"lineNumber":149,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":150,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":151,"author":{"gitId":"ChuaZiLong"},"content":" switch (type) {","lastModifiedDate":"2024-01-30"},{"lineNumber":152,"author":{"gitId":"ChuaZiLong"},"content":" case \"T\":","lastModifiedDate":"2024-01-30"},{"lineNumber":153,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2024-01-30"},{"lineNumber":154,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":155,"author":{"gitId":"ChuaZiLong"},"content":" case \"D\":","lastModifiedDate":"2024-01-30"},{"lineNumber":156,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 4) throw new DukeException(\"Invalid deadline format in file.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":157,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":158,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2024-01-30"},{"lineNumber":159,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":160,"author":{"gitId":"ChuaZiLong"},"content":" case \"E\":","lastModifiedDate":"2024-01-30"},{"lineNumber":161,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 5) throw new DukeException(\"Invalid event format in file.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":162,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime from \u003d LocalDateTime.parse(parts[3], formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":163,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime to \u003d LocalDateTime.parse(parts[4], formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":164,"author":{"gitId":"ChuaZiLong"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2024-01-30"},{"lineNumber":165,"author":{"gitId":"ChuaZiLong"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":166,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":167,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":168,"author":{"gitId":"ChuaZiLong"},"content":" if (task !\u003d null) {","lastModifiedDate":"2024-01-30"},{"lineNumber":169,"author":{"gitId":"ChuaZiLong"},"content":" if (isDone) {","lastModifiedDate":"2024-01-30"},{"lineNumber":170,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":171,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":172,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":173,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":174,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DukeException | DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":175,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"Skipping invalid task: \" + line);","lastModifiedDate":"2024-01-30"},{"lineNumber":176,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":177,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":178,"author":{"gitId":"ChuaZiLong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":179,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"File not found: \" + e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":180,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":181,"author":{"gitId":"ChuaZiLong"},"content":" return tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":182,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":183,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":184,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":185,"author":{"gitId":"ChuaZiLong"},"content":" public void save(TaskList tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":186,"author":{"gitId":"ChuaZiLong"},"content":" try (PrintWriter writer \u003d new PrintWriter(new FileWriter(filePath))) {","lastModifiedDate":"2024-01-30"},{"lineNumber":187,"author":{"gitId":"ChuaZiLong"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":188,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2024-01-30"},{"lineNumber":189,"author":{"gitId":"ChuaZiLong"},"content":" writer.println(taskToFileString(task));","lastModifiedDate":"2024-01-30"},{"lineNumber":190,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":191,"author":{"gitId":"ChuaZiLong"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":192,"author":{"gitId":"ChuaZiLong"},"content":" System.out.println(\"An error occurred while saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":193,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":194,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":195,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":196,"author":{"gitId":"ChuaZiLong"},"content":" private String taskToFileString(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":197,"author":{"gitId":"ChuaZiLong"},"content":" String type \u003d task instanceof Todo ? \"T\" :","lastModifiedDate":"2024-01-30"},{"lineNumber":198,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Deadline ? \"D\" :","lastModifiedDate":"2024-01-30"},{"lineNumber":199,"author":{"gitId":"ChuaZiLong"},"content":" task instanceof Event ? \"E\" : \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":200,"author":{"gitId":"ChuaZiLong"},"content":" String status \u003d task.isDone ? \"1\" : \"0\";","lastModifiedDate":"2024-01-30"},{"lineNumber":201,"author":{"gitId":"ChuaZiLong"},"content":" String details \u003d task.getDescription();","lastModifiedDate":"2024-01-30"},{"lineNumber":202,"author":{"gitId":"ChuaZiLong"},"content":" String additionalInfo \u003d \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":203,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":204,"author":{"gitId":"ChuaZiLong"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2024-01-30"},{"lineNumber":205,"author":{"gitId":"ChuaZiLong"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2024-01-30"},{"lineNumber":206,"author":{"gitId":"ChuaZiLong"},"content":" additionalInfo \u003d \" | \" + deadline.getBy().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2024-01-30"},{"lineNumber":207,"author":{"gitId":"ChuaZiLong"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2024-01-30"},{"lineNumber":208,"author":{"gitId":"ChuaZiLong"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2024-01-30"},{"lineNumber":209,"author":{"gitId":"ChuaZiLong"},"content":" additionalInfo \u003d \" | \" + event.getFrom().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\")) +","lastModifiedDate":"2024-01-30"},{"lineNumber":210,"author":{"gitId":"ChuaZiLong"},"content":" \" | \" + event.getTo().format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2024-01-30"},{"lineNumber":211,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":212,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":213,"author":{"gitId":"ChuaZiLong"},"content":" return type + \" | \" + status + \" | \" + details + additionalInfo;","lastModifiedDate":"2024-01-30"},{"lineNumber":214,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":215,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":216,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":217,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":218,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":219,"author":{"gitId":"ChuaZiLong"},"content":"class Parser {","lastModifiedDate":"2024-01-30"},{"lineNumber":220,"author":{"gitId":"ChuaZiLong"},"content":" private static final DateTimeFormatter dateTimeFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":221,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":222,"author":{"gitId":"ChuaZiLong"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":223,"author":{"gitId":"ChuaZiLong"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":224,"author":{"gitId":"ChuaZiLong"},"content":" String commandType \u003d commandParts[0];","lastModifiedDate":"2024-01-30"},{"lineNumber":225,"author":{"gitId":"ChuaZiLong"},"content":" String commandArgs \u003d commandParts.length \u003e 1 ? commandParts[1] : \"\";","lastModifiedDate":"2024-01-30"},{"lineNumber":226,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":227,"author":{"gitId":"ChuaZiLong"},"content":" switch (commandType) {","lastModifiedDate":"2024-01-30"},{"lineNumber":228,"author":{"gitId":"ChuaZiLong"},"content":" case \"todo\":","lastModifiedDate":"2024-01-30"},{"lineNumber":229,"author":{"gitId":"ChuaZiLong"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":230,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":231,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":232,"author":{"gitId":"ChuaZiLong"},"content":" return new AddTodoCommand(commandArgs);","lastModifiedDate":"2024-01-30"},{"lineNumber":233,"author":{"gitId":"ChuaZiLong"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-30"},{"lineNumber":234,"author":{"gitId":"ChuaZiLong"},"content":" return parseAddDeadlineCommand(commandArgs);","lastModifiedDate":"2024-01-30"},{"lineNumber":235,"author":{"gitId":"ChuaZiLong"},"content":" case \"event\":","lastModifiedDate":"2024-01-30"},{"lineNumber":236,"author":{"gitId":"ChuaZiLong"},"content":" return parseAddEventCommand(commandArgs);","lastModifiedDate":"2024-01-30"},{"lineNumber":237,"author":{"gitId":"ChuaZiLong"},"content":" case \"list\":","lastModifiedDate":"2024-01-30"},{"lineNumber":238,"author":{"gitId":"ChuaZiLong"},"content":" return new ListCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":239,"author":{"gitId":"ChuaZiLong"},"content":" case \"mark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":240,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":241,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":242,"author":{"gitId":"ChuaZiLong"},"content":" return new MarkCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":243,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":244,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":245,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":246,"author":{"gitId":"ChuaZiLong"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":247,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":248,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":249,"author":{"gitId":"ChuaZiLong"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":250,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":251,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":252,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":253,"author":{"gitId":"ChuaZiLong"},"content":" case \"delete\":","lastModifiedDate":"2024-01-30"},{"lineNumber":254,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":255,"author":{"gitId":"ChuaZiLong"},"content":" int index \u003d Integer.parseInt(commandArgs) - 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":256,"author":{"gitId":"ChuaZiLong"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":257,"author":{"gitId":"ChuaZiLong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":258,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":259,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":260,"author":{"gitId":"ChuaZiLong"},"content":" case \"bye\":","lastModifiedDate":"2024-01-30"},{"lineNumber":261,"author":{"gitId":"ChuaZiLong"},"content":" return new ExitCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":262,"author":{"gitId":"ChuaZiLong"},"content":" default:","lastModifiedDate":"2024-01-30"},{"lineNumber":263,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Unknown command\");","lastModifiedDate":"2024-01-30"},{"lineNumber":264,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":265,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":266,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":267,"author":{"gitId":"ChuaZiLong"},"content":" private static Command parseAddDeadlineCommand(String commandArgs) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":268,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d commandArgs.split(\"/by\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":269,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":270,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid deadline command format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":271,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":272,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":273,"author":{"gitId":"ChuaZiLong"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":274,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":275,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime byDate \u003d LocalDateTime.parse(by, dateTimeFormatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":276,"author":{"gitId":"ChuaZiLong"},"content":" return new AddDeadlineCommand(description, byDate);","lastModifiedDate":"2024-01-30"},{"lineNumber":277,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":278,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid date format. Please use yyyy-MM-dd HHmm format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":279,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":280,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":281,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":282,"author":{"gitId":"ChuaZiLong"},"content":" private static Command parseAddEventCommand(String commandArgs) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":283,"author":{"gitId":"ChuaZiLong"},"content":" String[] parts \u003d commandArgs.split(\"/at\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":284,"author":{"gitId":"ChuaZiLong"},"content":" if (parts.length \u003c 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":285,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid event command format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":286,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":287,"author":{"gitId":"ChuaZiLong"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":288,"author":{"gitId":"ChuaZiLong"},"content":" String at \u003d parts[1].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":289,"author":{"gitId":"ChuaZiLong"},"content":" String[] timeParts \u003d at.split(\"-\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":290,"author":{"gitId":"ChuaZiLong"},"content":" if (timeParts.length \u003c 2 || timeParts[0].trim().isEmpty() || timeParts[1].trim().isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":291,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid time format for event command.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":292,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":293,"author":{"gitId":"ChuaZiLong"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":294,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(timeParts[0].trim(), dateTimeFormatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":295,"author":{"gitId":"ChuaZiLong"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(timeParts[1].trim(), dateTimeFormatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":296,"author":{"gitId":"ChuaZiLong"},"content":" return new AddEventCommand(description, startTime, endTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":297,"author":{"gitId":"ChuaZiLong"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":298,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid date format. Please use yyyy-MM-dd HHmm format.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":299,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":300,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":301,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":302,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":303,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":304,"author":{"gitId":"ChuaZiLong"},"content":"class TaskList {","lastModifiedDate":"2024-01-30"},{"lineNumber":305,"author":{"gitId":"ChuaZiLong"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":306,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":307,"author":{"gitId":"ChuaZiLong"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":308,"author":{"gitId":"ChuaZiLong"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":309,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":310,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":311,"author":{"gitId":"ChuaZiLong"},"content":" public TaskList() {","lastModifiedDate":"2024-01-30"},{"lineNumber":312,"author":{"gitId":"ChuaZiLong"},"content":" this(new ArrayList\u003c\u003e());","lastModifiedDate":"2024-01-30"},{"lineNumber":313,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":314,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":315,"author":{"gitId":"ChuaZiLong"},"content":" public void addTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":316,"author":{"gitId":"ChuaZiLong"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":317,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":318,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":319,"author":{"gitId":"ChuaZiLong"},"content":" public Task removeTask(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":320,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.remove(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":321,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":322,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":323,"author":{"gitId":"ChuaZiLong"},"content":" public Task getTask(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":324,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.get(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":325,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":326,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":327,"author":{"gitId":"ChuaZiLong"},"content":" public int getSize() {","lastModifiedDate":"2024-01-30"},{"lineNumber":328,"author":{"gitId":"ChuaZiLong"},"content":" return tasks.size();","lastModifiedDate":"2024-01-30"},{"lineNumber":329,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":330,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":331,"author":{"gitId":"ChuaZiLong"},"content":" // ... any other methods needed for task management ...","lastModifiedDate":"2024-01-30"},{"lineNumber":332,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":333,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":334,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":335,"author":{"gitId":"ChuaZiLong"},"content":"enum TaskType {","lastModifiedDate":"2024-01-30"},{"lineNumber":336,"author":{"gitId":"ChuaZiLong"},"content":" TODO,","lastModifiedDate":"2024-01-30"},{"lineNumber":337,"author":{"gitId":"ChuaZiLong"},"content":" DEADLINE,","lastModifiedDate":"2024-01-30"},{"lineNumber":338,"author":{"gitId":"ChuaZiLong"},"content":" EVENT","lastModifiedDate":"2024-01-30"},{"lineNumber":339,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":340,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":341,"author":{"gitId":"ChuaZiLong"},"content":"class Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":342,"author":{"gitId":"ChuaZiLong"},"content":" protected String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":343,"author":{"gitId":"ChuaZiLong"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-30"},{"lineNumber":344,"author":{"gitId":"ChuaZiLong"},"content":" protected TaskType taskType;","lastModifiedDate":"2024-01-30"},{"lineNumber":345,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":346,"author":{"gitId":"ChuaZiLong"},"content":" public Task(String description, TaskType taskType) {","lastModifiedDate":"2024-01-30"},{"lineNumber":347,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":348,"author":{"gitId":"ChuaZiLong"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":349,"author":{"gitId":"ChuaZiLong"},"content":" this.taskType \u003d taskType;","lastModifiedDate":"2024-01-30"},{"lineNumber":350,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":351,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":352,"author":{"gitId":"ChuaZiLong"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-30"},{"lineNumber":353,"author":{"gitId":"ChuaZiLong"},"content":" return \"[\" + taskType + \"]\" + (isDone ? \"[X] \" : \"[ ] \");","lastModifiedDate":"2024-01-30"},{"lineNumber":354,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":355,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":356,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-30"},{"lineNumber":357,"author":{"gitId":"ChuaZiLong"},"content":" return description;","lastModifiedDate":"2024-01-30"},{"lineNumber":358,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":359,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":360,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-30"},{"lineNumber":361,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-30"},{"lineNumber":362,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":363,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":364,"author":{"gitId":"ChuaZiLong"},"content":" public void markAsNotDone() {","lastModifiedDate":"2024-01-30"},{"lineNumber":365,"author":{"gitId":"ChuaZiLong"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":366,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":367,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":368,"author":{"gitId":"ChuaZiLong"},"content":" public String toString() {","lastModifiedDate":"2024-01-30"},{"lineNumber":369,"author":{"gitId":"ChuaZiLong"},"content":" return getStatusIcon() + getDescription();","lastModifiedDate":"2024-01-30"},{"lineNumber":370,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":371,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":372,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":373,"author":{"gitId":"ChuaZiLong"},"content":"class Todo extends Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":374,"author":{"gitId":"ChuaZiLong"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-30"},{"lineNumber":375,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2024-01-30"},{"lineNumber":376,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":377,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":378,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":379,"author":{"gitId":"ChuaZiLong"},"content":"class Deadline extends Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":380,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime by;","lastModifiedDate":"2024-01-30"},{"lineNumber":381,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":382,"author":{"gitId":"ChuaZiLong"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-30"},{"lineNumber":383,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2024-01-30"},{"lineNumber":384,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-30"},{"lineNumber":385,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":386,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":387,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":388,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-30"},{"lineNumber":389,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":390,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (by: \" + formatter.format(by) + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":391,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":392,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2024-01-30"},{"lineNumber":393,"author":{"gitId":"ChuaZiLong"},"content":" return by;","lastModifiedDate":"2024-01-30"},{"lineNumber":394,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":395,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":396,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":397,"author":{"gitId":"ChuaZiLong"},"content":"class Event extends Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":398,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime from;","lastModifiedDate":"2024-01-30"},{"lineNumber":399,"author":{"gitId":"ChuaZiLong"},"content":" protected LocalDateTime to;","lastModifiedDate":"2024-01-30"},{"lineNumber":400,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":401,"author":{"gitId":"ChuaZiLong"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2024-01-30"},{"lineNumber":402,"author":{"gitId":"ChuaZiLong"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2024-01-30"},{"lineNumber":403,"author":{"gitId":"ChuaZiLong"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-30"},{"lineNumber":404,"author":{"gitId":"ChuaZiLong"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-30"},{"lineNumber":405,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":406,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":407,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":408,"author":{"gitId":"ChuaZiLong"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-30"},{"lineNumber":409,"author":{"gitId":"ChuaZiLong"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":410,"author":{"gitId":"ChuaZiLong"},"content":" return super.getDescription() + \" (from: \" + formatter.format(from) + \" to: \" + formatter.format(to) + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":411,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":412,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2024-01-30"},{"lineNumber":413,"author":{"gitId":"ChuaZiLong"},"content":" return from;","lastModifiedDate":"2024-01-30"},{"lineNumber":414,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":415,"author":{"gitId":"ChuaZiLong"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2024-01-30"},{"lineNumber":416,"author":{"gitId":"ChuaZiLong"},"content":" return to;","lastModifiedDate":"2024-01-30"},{"lineNumber":417,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":418,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":419,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":420,"author":{"gitId":"ChuaZiLong"},"content":"abstract class Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":421,"author":{"gitId":"ChuaZiLong"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2024-01-30"},{"lineNumber":422,"author":{"gitId":"ChuaZiLong"},"content":" public abstract boolean isExit();","lastModifiedDate":"2024-01-30"},{"lineNumber":423,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":424,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":425,"author":{"gitId":"ChuaZiLong"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":426,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":427,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":428,"author":{"gitId":"ChuaZiLong"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":429,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":430,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":431,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":432,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":433,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":434,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":435,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":436,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":437,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":438,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":439,"author":{"gitId":"ChuaZiLong"},"content":" ui.showMarkedTask(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":440,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":441,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":442,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":443,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":444,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":445,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":446,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":447,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":448,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":449,"author":{"gitId":"ChuaZiLong"},"content":"class UnmarkCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":450,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":451,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":452,"author":{"gitId":"ChuaZiLong"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":453,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":454,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":455,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":456,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":457,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":458,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":459,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":460,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":461,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":462,"author":{"gitId":"ChuaZiLong"},"content":" task.markAsNotDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":463,"author":{"gitId":"ChuaZiLong"},"content":" ui.showUnmarkedTask(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":464,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":465,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":466,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":467,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":468,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":469,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":470,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":471,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":472,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":473,"author":{"gitId":"ChuaZiLong"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":474,"author":{"gitId":"ChuaZiLong"},"content":" private int index;","lastModifiedDate":"2024-01-30"},{"lineNumber":475,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":476,"author":{"gitId":"ChuaZiLong"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":477,"author":{"gitId":"ChuaZiLong"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-30"},{"lineNumber":478,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":479,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":480,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":481,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":482,"author":{"gitId":"ChuaZiLong"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":483,"author":{"gitId":"ChuaZiLong"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":484,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":485,"author":{"gitId":"ChuaZiLong"},"content":" Task task \u003d tasks.removeTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":486,"author":{"gitId":"ChuaZiLong"},"content":" ui.showDeletedTask(task, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":487,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":488,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":489,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":490,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":491,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":492,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":493,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":494,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":495,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":496,"author":{"gitId":"ChuaZiLong"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":497,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":498,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":499,"author":{"gitId":"ChuaZiLong"},"content":" ui.showGoodbye();","lastModifiedDate":"2024-01-30"},{"lineNumber":500,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":501,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":502,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":503,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":504,"author":{"gitId":"ChuaZiLong"},"content":" return true; // Indicate that the application should exit","lastModifiedDate":"2024-01-30"},{"lineNumber":505,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":506,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":507,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":508,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":509,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":510,"author":{"gitId":"ChuaZiLong"},"content":"class ListCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":511,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":512,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":513,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":514,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":515,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":516,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":517,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":518,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":519,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":520,"author":{"gitId":"ChuaZiLong"},"content":"class AddTodoCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":521,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":522,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":523,"author":{"gitId":"ChuaZiLong"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2024-01-30"},{"lineNumber":524,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":525,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":526,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":527,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":528,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":529,"author":{"gitId":"ChuaZiLong"},"content":" Todo newTodo \u003d new Todo(description);","lastModifiedDate":"2024-01-30"},{"lineNumber":530,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newTodo);","lastModifiedDate":"2024-01-30"},{"lineNumber":531,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newTodo, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":532,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":533,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":534,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":535,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":536,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":537,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":538,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":539,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":540,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":541,"author":{"gitId":"ChuaZiLong"},"content":"class AddDeadlineCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":542,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":543,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime by;","lastModifiedDate":"2024-01-30"},{"lineNumber":544,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":545,"author":{"gitId":"ChuaZiLong"},"content":" public AddDeadlineCommand(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-30"},{"lineNumber":546,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":547,"author":{"gitId":"ChuaZiLong"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-30"},{"lineNumber":548,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":549,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":550,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":551,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":552,"author":{"gitId":"ChuaZiLong"},"content":" Deadline newDeadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-30"},{"lineNumber":553,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newDeadline);","lastModifiedDate":"2024-01-30"},{"lineNumber":554,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newDeadline, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":555,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":556,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":557,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":558,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":559,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":560,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":561,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":562,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"},{"lineNumber":563,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":564,"author":{"gitId":"ChuaZiLong"},"content":"class AddEventCommand extends Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":565,"author":{"gitId":"ChuaZiLong"},"content":" private String description;","lastModifiedDate":"2024-01-30"},{"lineNumber":566,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime start;","lastModifiedDate":"2024-01-30"},{"lineNumber":567,"author":{"gitId":"ChuaZiLong"},"content":" private LocalDateTime end;","lastModifiedDate":"2024-01-30"},{"lineNumber":568,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":569,"author":{"gitId":"ChuaZiLong"},"content":" public AddEventCommand(String description, LocalDateTime start, LocalDateTime end) {","lastModifiedDate":"2024-01-30"},{"lineNumber":570,"author":{"gitId":"ChuaZiLong"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-30"},{"lineNumber":571,"author":{"gitId":"ChuaZiLong"},"content":" this.start \u003d start;","lastModifiedDate":"2024-01-30"},{"lineNumber":572,"author":{"gitId":"ChuaZiLong"},"content":" this.end \u003d end;","lastModifiedDate":"2024-01-30"},{"lineNumber":573,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":574,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":575,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":576,"author":{"gitId":"ChuaZiLong"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2024-01-30"},{"lineNumber":577,"author":{"gitId":"ChuaZiLong"},"content":" Event newEvent \u003d new Event(description, start, end);","lastModifiedDate":"2024-01-30"},{"lineNumber":578,"author":{"gitId":"ChuaZiLong"},"content":" tasks.addTask(newEvent);","lastModifiedDate":"2024-01-30"},{"lineNumber":579,"author":{"gitId":"ChuaZiLong"},"content":" ui.showTaskAdded(newEvent, tasks.getSize());","lastModifiedDate":"2024-01-30"},{"lineNumber":580,"author":{"gitId":"ChuaZiLong"},"content":" storage.save(tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":581,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":582,"author":{"gitId":"ChuaZiLong"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":583,"author":{"gitId":"ChuaZiLong"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":584,"author":{"gitId":"ChuaZiLong"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":585,"author":{"gitId":"ChuaZiLong"},"content":" return false;","lastModifiedDate":"2024-01-30"},{"lineNumber":586,"author":{"gitId":"ChuaZiLong"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":587,"author":{"gitId":"ChuaZiLong"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"ChuaZiLong":587}}] diff --git a/ChuaZiLong_ip_master/commits.json b/ChuaZiLong_ip_master/commits.json index 4d850bc7..1ccd569e 100644 --- a/ChuaZiLong_ip_master/commits.json +++ b/ChuaZiLong_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ChuaZiLong":[{"date":"2024-01-24","commitResults":[{"hash":"fd3f99fb596f998f2487e68efc8b5d2f7f350e7e","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-2","Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"dd89622fc701f0bddd2dbf55f083b66a9e53174d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":2}}},{"hash":"c6b08c34427581e95e0116644cfd45d526c4b526","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":1}}},{"hash":"16d59cf35e9dedb09a88d89de11a21af6ab8d21e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":25}}},{"hash":"2a85b68c30ab1c6e2d8939e4762cf547227fb438","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"c55f6371ce0501bd85b9d72ccfc70cb9e4b4d0a6","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":26}}},{"hash":"5267dc4dfceea9e571bc031d406cfb1c65473a07","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":59}}},{"hash":"242e73e4992665462773773acde21be7dcfe67cb","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-28","commitResults":[{"hash":"56c3caadae335aa3c11ad6c5d87f2da6d6a3f61d","isMergeCommit":false,"messageTitle":"Save tasks in the hard disk automatically","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"ChuaZiLong":{"java":322,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"ChuaZiLong":19898.406},"authorDisplayNameMap":{"ChuaZiLong":"CS2103T-W08-3 CHUA..LONG"}} +{"authorDailyContributionsMap":{"ChuaZiLong":[{"date":"2024-01-24","commitResults":[{"hash":"fd3f99fb596f998f2487e68efc8b5d2f7f350e7e","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-2","Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"dd89622fc701f0bddd2dbf55f083b66a9e53174d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":2}}},{"hash":"c6b08c34427581e95e0116644cfd45d526c4b526","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":1}}},{"hash":"16d59cf35e9dedb09a88d89de11a21af6ab8d21e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":145,"deletions":25}}},{"hash":"2a85b68c30ab1c6e2d8939e4762cf547227fb438","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"c55f6371ce0501bd85b9d72ccfc70cb9e4b4d0a6","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":26}}},{"hash":"5267dc4dfceea9e571bc031d406cfb1c65473a07","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":59}}},{"hash":"242e73e4992665462773773acde21be7dcfe67cb","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-28","commitResults":[{"hash":"56c3caadae335aa3c11ad6c5d87f2da6d6a3f61d","isMergeCommit":false,"messageTitle":"Save tasks in the hard disk automatically","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":0}}},{"hash":"091ddb4beb72db255a471226f6ec69a17d1213d5","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"96a0d97164262badbf6c7d87fc6583704be36551","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":22}}},{"hash":"b9bd9ec011f461dab8ffc492286d59b004c48a47","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":335,"deletions":253}}}]},{"date":"2024-01-30","commitResults":[{"hash":"c0e5ae6a44d1b38923aa58d99cde5a2f67e734e4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":17}}},{"hash":"a49a99daf39b3c3e6fa93a602a861de30885edc2","isMergeCommit":false,"messageTitle":"Package duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":587,"deletions":0}}},{"hash":"e0addcd37aa499f35c71c79591228933525e8c6b","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"6f18bc54c059f660f76d2b4b6f9e29ba77020575","isMergeCommit":false,"messageTitle":"Add Gradle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":588,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"ChuaZiLong":{"java":1754,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"ChuaZiLong":170469.19},"authorDisplayNameMap":{"ChuaZiLong":"CS2103T-W08-3 CHUA..LONG"}} diff --git a/Darylgolden_ip_master/commits.json b/Darylgolden_ip_master/commits.json index fd53dfbb..20fde25c 100644 --- a/Darylgolden_ip_master/commits.json +++ b/Darylgolden_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Darylgolden":[{"date":"2024-01-24","commitResults":[{"hash":"f34cd0e6169ef6cb91f192da9af04761e9db5e9c","isMergeCommit":false,"messageTitle":"created command interface and chatsession class, renamed duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d338aeccb278ce45b0b51403ab37cee9b39390b6","isMergeCommit":false,"messageTitle":"level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"2275296dfade561ef2d7d4367122106368ca2e03","isMergeCommit":false,"messageTitle":"create task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"86958aec3628e8897d771b1f191258c941a1b44e","isMergeCommit":false,"messageTitle":"refactored logic into chatsession","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}},{"hash":"7ee86639333db72f2826175dc235d003b9e3efa8","isMergeCommit":false,"messageTitle":"start bye command and impl of termination commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"9466c0f8af0bd2bc323a50bfa91a7caf32c713a0","isMergeCommit":false,"messageTitle":"create printMessage method in ChatSession","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"f6b1efbf67c79695b6e551d6459d180c1049db48","isMergeCommit":false,"messageTitle":"method for printing messages and for terminating sesh","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"6dfcf2f7e2c9946732707bd909eacf5b3814ca64","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":10}}},{"hash":"e4051e1ec2e81df3c1cfa9ca936b09d466f7596e","isMergeCommit":false,"messageTitle":"level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"04b7dfd0e4a3efc08c65bef24d29db5002d0f591","isMergeCommit":false,"messageTitle":"level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":2}}},{"hash":"9eaeda67132fe8ac202687f25feb34d1ec515afc","isMergeCommit":false,"messageTitle":"add todo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Darylgolden":{"java":212,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"Darylgolden":11680.556},"authorDisplayNameMap":{"Darylgolden":"DARY.. YAO"}} +{"authorDailyContributionsMap":{"Darylgolden":[{"date":"2024-01-24","commitResults":[{"hash":"f34cd0e6169ef6cb91f192da9af04761e9db5e9c","isMergeCommit":false,"messageTitle":"created command interface and chatsession class, renamed duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d338aeccb278ce45b0b51403ab37cee9b39390b6","isMergeCommit":false,"messageTitle":"level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"2275296dfade561ef2d7d4367122106368ca2e03","isMergeCommit":false,"messageTitle":"create task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"86958aec3628e8897d771b1f191258c941a1b44e","isMergeCommit":false,"messageTitle":"refactored logic into chatsession","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}},{"hash":"7ee86639333db72f2826175dc235d003b9e3efa8","isMergeCommit":false,"messageTitle":"start bye command and impl of termination commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"9466c0f8af0bd2bc323a50bfa91a7caf32c713a0","isMergeCommit":false,"messageTitle":"create printMessage method in ChatSession","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"f6b1efbf67c79695b6e551d6459d180c1049db48","isMergeCommit":false,"messageTitle":"method for printing messages and for terminating sesh","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":1}}},{"hash":"6dfcf2f7e2c9946732707bd909eacf5b3814ca64","isMergeCommit":false,"messageTitle":"level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":10}}},{"hash":"e4051e1ec2e81df3c1cfa9ca936b09d466f7596e","isMergeCommit":false,"messageTitle":"level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"04b7dfd0e4a3efc08c65bef24d29db5002d0f591","isMergeCommit":false,"messageTitle":"level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":2}}},{"hash":"9eaeda67132fe8ac202687f25feb34d1ec515afc","isMergeCommit":false,"messageTitle":"add todo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Darylgolden":{"java":212,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"Darylgolden":11680.556},"authorDisplayNameMap":{"Darylgolden":"DARY.. YAO"}} diff --git a/Ella-e_ip_master/authorship.json b/Ella-e_ip_master/authorship.json index 476e11e2..be31a267 100644 --- a/Ella-e_ip_master/authorship.json +++ b/Ella-e_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"1. Open Intellij (if you are not in the welcome screen, click `Storage` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2024-01-29"},{"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":{"Ella-e":1,"-":23}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"T|0|abc","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"D|1|abc |2022-01-02","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":2}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import exceptions.BaseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import tasks.Task;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" private Storage storage;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" private UI ui;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" public Duke(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" this.ui \u003d new UI();","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" public void run(){","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" ui.onEnter();","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" while (true) {","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" // use parser to process the userInput","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" // the parser object contains all the current user input line information","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" parser.parse(userInput);","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" // check for end the session","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" if (parser.getCurrentKey().equals(KeyEnum.EXITKEY)){","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" // continue for the functionality","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" switch (parser.getCurrentKey()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-22"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" case TODO:","lastModifiedDate":"2024-01-22"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" case EVENT:","lastModifiedDate":"2024-01-22"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" Task task \u003d tasks.addTask(parser.getInputDetail(), parser.getFrom(), parser.getTo(), parser.getCurrentKey());","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" ui.onAddSuccess(task, tasks.getNumOfTasks());","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" case LIST:","lastModifiedDate":"2024-01-22"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" ui.showList(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" case MARK:","lastModifiedDate":"2024-01-22"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" Task markedTask \u003d tasks.markTaskById(parser.getIndex(), true);","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" ui.onMarkDone(markedTask);","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" case UNMARK:","lastModifiedDate":"2024-01-22"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" Task unMarkedTask \u003d tasks.markTaskById(parser.getIndex(), false);","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" ui.onUnmarkDone(unMarkedTask);","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" case DELETE:","lastModifiedDate":"2024-01-22"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" Task deletedTask \u003d tasks.deleteTaskById(parser.getIndex());","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" ui.onDelete(deletedTask, tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" } catch (BaseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" ui.showErrorMsg(e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" ui.onExit();","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-22"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" Duke duke \u003d new Duke(\"./data/duke.txt\");","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" duke.run();","lastModifiedDate":"2024-01-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Ella-e":73,"-":4}},{"path":"src/main/java/KeyEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"public enum KeyEnum {","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":" EXITKEY(\"bye\"), LIST(\"list\"), MARK(\"mark\"), UNMARK(\"unmark\"), EVENT(\"event\"), DEADLINE(\"deadline\"), TODO(\"todo\"), DELETE(\"delete\"),INVALID(\"invalid\");","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":" private String detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" KeyEnum(String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" this.detail \u003d detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" return this.detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":13}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import exceptions.EmptyBodyException;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import exceptions.InvalidKeyException;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import exceptions.WrongFormatException;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"public class Parser {","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" private KeyEnum currentKey \u003d KeyEnum.INVALID;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" private String inputDetail;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" private String to;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" private String from;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" private Integer index;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public void parse(String userInput) throws InvalidKeyException, EmptyBodyException, WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" String[] userInputSplit \u003d userInput.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" this.determineCurrentKey(userInputSplit[0]);","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" switch (this.currentKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" if (userInput.length() \u003c\u003d 9) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" throw new EmptyBodyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" inputDetail \u003d userInput.substring(9, userInput.indexOf(\"/by\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" to \u003d userInput.substring(userInput.indexOf(\"/by\")+4);","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" throw new WrongFormatException(\"\\\"deadline content /by yyyy-mm-dd\\\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" case TODO:","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" if (userInput.length() \u003c\u003d 5) {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" throw new EmptyBodyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" inputDetail \u003d userInput.substring(5);","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" case EVENT:","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" if (userInput.length() \u003c\u003d 6) {","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" throw new EmptyBodyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" inputDetail \u003d userInput.substring(6, userInput.indexOf(\"/from\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" from \u003d userInput.substring(userInput.indexOf(\"/from\")+6, userInput.indexOf(\"/to\")-1);","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" to \u003d userInput.substring(userInput.indexOf(\"/to\")+4);","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" throw new WrongFormatException(\"\\\"deadline content /from time /to time\\\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" case MARK:","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" case UNMARK:","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" case DELETE:","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" this.index \u003d new Integer(userInputSplit[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException(\"Please use a valid integer as key\");","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" public void determineCurrentKey(String userInputKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" switch (userInputKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" case \"bye\":","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.EXITKEY;","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" case \"list\":","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.LIST;","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" case \"mark\":","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.MARK;","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.UNMARK;","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" case \"event\":","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.EVENT;","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.DEADLINE;","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":" case \"todo\":","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.TODO;","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" case \"delete\":","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.DELETE;","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Ella-e"},"content":" if (this.currentKey.equals(KeyEnum.INVALID)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Ella-e"},"content":" // raise InvalidKeyException","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Ella-e"},"content":" public KeyEnum getCurrentKey() {","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Ella-e"},"content":" return currentKey;","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Ella-e"},"content":" public void setCurrentKey(KeyEnum currentKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Ella-e"},"content":" this.currentKey \u003d currentKey;","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":98,"author":{"gitId":"Ella-e"},"content":" public String getInputDetail() {","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Ella-e"},"content":" return inputDetail;","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Ella-e"},"content":" public void setInputDetail(String inputDetail) {","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Ella-e"},"content":" this.inputDetail \u003d inputDetail;","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Ella-e"},"content":" public String getTo() {","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Ella-e"},"content":" return to;","lastModifiedDate":"2024-01-29"},{"lineNumber":108,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":109,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":110,"author":{"gitId":"Ella-e"},"content":" public void setTo(String to) {","lastModifiedDate":"2024-01-29"},{"lineNumber":111,"author":{"gitId":"Ella-e"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-29"},{"lineNumber":112,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":113,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":114,"author":{"gitId":"Ella-e"},"content":" public String getFrom() {","lastModifiedDate":"2024-01-29"},{"lineNumber":115,"author":{"gitId":"Ella-e"},"content":" return from;","lastModifiedDate":"2024-01-29"},{"lineNumber":116,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":117,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":118,"author":{"gitId":"Ella-e"},"content":" public void setFrom(String from) {","lastModifiedDate":"2024-01-29"},{"lineNumber":119,"author":{"gitId":"Ella-e"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-29"},{"lineNumber":120,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":121,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Ella-e"},"content":" public Integer getIndex() {","lastModifiedDate":"2024-01-29"},{"lineNumber":123,"author":{"gitId":"Ella-e"},"content":" return index;","lastModifiedDate":"2024-01-29"},{"lineNumber":124,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":125,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":126,"author":{"gitId":"Ella-e"},"content":" public void setIndex(Integer index) {","lastModifiedDate":"2024-01-29"},{"lineNumber":127,"author":{"gitId":"Ella-e"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-29"},{"lineNumber":128,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":129,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":129}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import tasks.Deadline;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import tasks.Event;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import tasks.Task;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import tasks.Todo;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"public class Storage {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" private String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" private File file;","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" public Storage() {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" if (!this.file.getParentFile().exists())","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" if (!this.file.exists())","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" this.file.createNewFile();","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" return this.readFile();","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" /**","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" * read content of the file into task list.","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" * @return task list read from file","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" * @throws FileNotFoundException if the file is not found","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" private ArrayList\u003cTask\u003e readFile() throws FileNotFoundException{","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" Scanner s \u003d new Scanner(file); // create a Scanner using the File as the source","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" String currentTaskString \u003d s.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" Task newTask \u003d this.stringToTask(currentTaskString);","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" taskList.add(newTask);","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" return taskList;","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" /**","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" * write all the tasks in the task list to the file stored","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" * @param taskList","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" * @throws IOException","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" public void writeTasksToFile(TaskList taskList) throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" for(int i \u003d 0; i\u003c taskList.getNumOfTasks(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" fw.write(taskList.getTaskInfileStringFormat(i) + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" /**","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" * Change task from string format to task object","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" * @param str String format of the task","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" * @return The respective task object","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" private Task stringToTask(String str) {","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" String[] strSplit \u003d str.split(\"\\\\|\");","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" Boolean status \u003d strSplit[1].equals(\"1\");","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" String detail \u003d strSplit[2];","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" Task task \u003d new Task(status, detail);","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" switch (strSplit[0]) {","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" case \"T\":","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" task \u003d new Todo(status, detail);","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":" case \"D\":","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":" String by \u003d strSplit[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":" task \u003d new Deadline(status, detail, by);","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" case \"E\":","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":" String from \u003d strSplit[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":" String to \u003d strSplit[4];","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Ella-e"},"content":" task \u003d new Event(status, detail, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Ella-e"},"content":" return task;","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":93}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import exceptions.InvalidDateTimeException;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import exceptions.InvalidKeyException;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import exceptions.WrongFormatException;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import tasks.Deadline;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import tasks.Event;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import tasks.Task;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"import tasks.Todo;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"public class TaskList {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" public TaskList() {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" public Integer getNumOfTasks() {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" return this.tasks.size();","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" public String getTaskInfileStringFormat(Integer i) {","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" return this.tasks.get(i).inFileStringFormat();","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" public void listTask() {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" System.out.println((i+1)+\". \" + tasks.get(i));","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" public Task addTask(String detail, String from, String to, KeyEnum currentKey) throws WrongFormatException, InvalidDateTimeException {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" Task task \u003d null;","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" switch (currentKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" task \u003d new Deadline(false, detail, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" case TODO:","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" task \u003d new Todo(false, detail);","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" case EVENT:","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" task \u003d new Event(false, detail, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" // Throw empty body exception if the added","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" if (task\u003d\u003dnull || detail.length() \u003d\u003d 0) {","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" throw new WrongFormatException(\"The task body can not be empty. Please specify the task you want to add.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" return task;","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" public Task markTaskById(Integer id, Boolean status) throws IOException, InvalidKeyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" // Test if the id is out of bound","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" if (id \u003e\u003d this.getNumOfTasks()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException(\"Id out of bound\");","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" this.tasks.get(id).setStatus(status);","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" return this.tasks.get(id);","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" public Task deleteTaskById(Integer id) throws IOException, InvalidKeyException{","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" // Test if the id is out of bound","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" if (id \u003e\u003d this.getNumOfTasks()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException(\"Id out of bound\");","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" Task taskToDelete \u003d this.tasks.get(id);","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" this.tasks.remove(taskToDelete);","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" return taskToDelete;","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":76}},{"path":"src/main/java/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import tasks.Task;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"public class UI {","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" private Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public void onEnter() {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Hello! I\u0027m Plaudern\\nWhat can I do for you?\");","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public void showList(TaskList taskList) {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" taskList.listTask();","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" public void onAddSuccess(Task task, Integer count) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" this.showTaskListCount(count);","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" public void onMarkDone(Task task) {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" public void onUnmarkDone(Task task) {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" public void onDelete(Task task, TaskList taskList) {","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" this.showTaskListCount(taskList.getNumOfTasks());","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" public void showErrorMsg(String msg) {","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" System.out.println(msg);","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Error occur when initiating the resources.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" public String getUserInput() {","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" public void onExit() {","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" public void showTaskListCount(Integer count) {","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Now you have \"+ count +\" tasks in the list.\" );","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":58}},{"path":"src/main/java/exceptions/BaseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package exceptions;","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class BaseException extends RuntimeException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public BaseException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super();","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public BaseException(String message, Throwable cause) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(message, cause);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public BaseException(String message){","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" public BaseException(Throwable cause) {","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" super(cause);","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":20}},{"path":"src/main/java/exceptions/EmptyBodyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package exceptions;","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class EmptyBodyException extends BaseException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public EmptyBodyException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(\"!!!ERROR: Please specify the content of the task you want to add.\");","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public EmptyBodyException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"src/main/java/exceptions/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package exceptions;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class InvalidDateTimeException extends BaseException{","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(\"Incorrect format of date, please follow the convention: yyyy-mm-dd\");","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":7}},{"path":"src/main/java/exceptions/InvalidKeyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package exceptions;","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class InvalidKeyException extends BaseException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public InvalidKeyException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(\"!!!ERROR: Sorry we can\u0027t recognize your instruction, please use valid one.\");","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public InvalidKeyException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"src/main/java/exceptions/WrongFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package exceptions;","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class WrongFormatException extends BaseException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public WrongFormatException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(\"!!!ERROR: Incorrect instruction format. The correct format is: \" + message);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import exceptions.InvalidDateTimeException;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import tasks.Task;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import utils.DukeDateFormater;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" private LocalDate by;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" private DukeDateFormater formater \u003d new DukeDateFormater();","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" public Deadline(Boolean status, String detail, String by) throws DateTimeParseException {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" super(status, detail);","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" this.by \u003d this.formater.stringToDate(by);","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" return \"D|\" + super.inFileStringFormat() + \"|\" + this.by.toString();","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.formater.dateToString(this.by) + \")\";","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":32}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import tasks.Task;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" private String start;","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" private String by;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public Event(Boolean status, String detail, String start, String by) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(status, detail);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" this.start \u003d start;","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" return \"E|\" + super.inFileStringFormat() + \"|\" + this.start + \"|\" + this.by;","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" return \"[E]\" + super.toString() + \"(from: \" + start + \" to: \" + by + \")\";","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":23}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" private Boolean status;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" private String detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" public Task(Boolean status, String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" this.status \u003d status;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" this.detail \u003d detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public Boolean getStatus() {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" return status;","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" public void setStatus(Boolean status) {","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" this.status \u003d status;","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" public String getDetail() {","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" return detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" public void setDetail(String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" this.detail \u003d detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" String intStatus \u003d this.status? \"1\":\"0\";","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" return intStatus + \"|\" + this.detail;","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" if (this.status) {","lastModifiedDate":"2024-01-22"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" return \"[X] \" + this.detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" } else {","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" return \"[ ] \" + this.detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":40}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public Todo(Boolean status, String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(status, detail);","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" return \"T|\" + super.inFileStringFormat();","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":17}},{"path":"src/main/java/utils/DukeDateFormater.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package utils;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"public class DukeDateFormater {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" public LocalDate stringToDate(String dateStr) {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" return LocalDate.parse(dateStr);","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" public String dateToString(LocalDate date) {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":14}},{"path":"src/main/test/DukeDateFormaterTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import org.junit.Assert;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import org.junit.Test;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import utils.DukeDateFormater;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"public class DukeDateFormaterTest {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" public void testFormatDate() {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" DukeDateFormater formater \u003d new DukeDateFormater();","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" // Format date success - the string is valid","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" LocalDate date \u003d formater.stringToDate(\"2019-12-01\");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" Assert.assertEquals(\"2019-12-01\", date.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" // Format date fail - the string is not in valid date format","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" Assert.assertThrows(DateTimeParseException.class, ()-\u003e {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" LocalDate date2 \u003d formater.stringToDate(\"2019-12-99\");","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" });","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" // Format date fail - the string is not in valid date format","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" Assert.assertThrows(DateTimeParseException.class, ()-\u003e {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" LocalDate date2 \u003d formater.stringToDate(\"2019/12/01\");","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" });","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" // Format date fail - the string is not in valid date format","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" Assert.assertThrows(DateTimeParseException.class, ()-\u003e {","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" LocalDate date2 \u003d formater.stringToDate(\"abca-bc-ab\");","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" });","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":32}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"todo borrow book","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"mark 3","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"mark 2","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"unmark 3","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"bye","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"# duke.Duke project template","lastModifiedDate":"2024-01-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":"Ella-e"},"content":"1. Open Intellij (if you are not in the welcome screen, click `duke.storage.Storage` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2024-01-30"},{"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":"Ella-e"},"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":"2024-01-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":{"Ella-e":3,"-":21}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"T|0|eat","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"D|0|eat |2002-11-29","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"E|1|eat |11|b","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"Ella-e":3}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.BaseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import duke.storage.Storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import duke.tasks.Task;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"import duke.ui.UI;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"import duke.utils.KeyEnum;","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"import duke.utils.Parser;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-21"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" private Storage storage;","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" private UI ui;","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" public Duke(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" this.ui \u003d new UI();","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" public void run(){","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" ui.onEnter();","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" while (true) {","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" String userInput \u003d ui.getUserInput();","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" // use parser to process the userInput","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" // the parser object contains all the current user input line information","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" parser.parse(userInput);","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" // check for end the session","lastModifiedDate":"2024-01-22"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" if (parser.getCurrentKey().equals(KeyEnum.EXITKEY)){","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" // continue for the functionality","lastModifiedDate":"2024-01-22"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" switch (parser.getCurrentKey()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-22"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" case TODO:","lastModifiedDate":"2024-01-22"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" case EVENT:","lastModifiedDate":"2024-01-22"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" Task task \u003d tasks.addTask(parser.getInputDetail(), parser.getFrom(), parser.getTo(), parser.getCurrentKey());","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" ui.onAddSuccess(task, tasks.getNumOfTasks());","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" case LIST:","lastModifiedDate":"2024-01-22"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" ui.showList(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" case MARK:","lastModifiedDate":"2024-01-22"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" Task markedTask \u003d tasks.markTaskById(parser.getIndex(), true);","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" ui.onMarkDone(markedTask);","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" case UNMARK:","lastModifiedDate":"2024-01-22"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" Task unMarkedTask \u003d tasks.markTaskById(parser.getIndex(), false);","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" ui.onUnmarkDone(unMarkedTask);","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" case DELETE:","lastModifiedDate":"2024-01-22"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" Task deletedTask \u003d tasks.deleteTaskById(parser.getIndex());","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" storage.writeTasksToFile(tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" ui.onDelete(deletedTask, tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" } catch (BaseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" ui.showErrorMsg(e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":" ui.onExit();","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-22"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" Duke duke \u003d new Duke(\"./data/duke.txt\");","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":" duke.run();","lastModifiedDate":"2024-01-22"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Ella-e":82,"-":2}},{"path":"src/main/java/duke/exceptions/BaseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.exceptions;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class BaseException extends RuntimeException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public BaseException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super();","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public BaseException(String message, Throwable cause) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(message, cause);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public BaseException(String message){","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" public BaseException(Throwable cause) {","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" super(cause);","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":20}},{"path":"src/main/java/duke/exceptions/EmptyBodyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.exceptions;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class EmptyBodyException extends BaseException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public EmptyBodyException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(\"!!!ERROR: Please specify the content of the task you want to add.\");","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public EmptyBodyException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"src/main/java/duke/exceptions/InvalidDateTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.exceptions;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class InvalidDateTimeException extends BaseException{","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public InvalidDateTimeException() {","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(\"Incorrect format of date, please follow the convention: yyyy-mm-dd\");","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":7}},{"path":"src/main/java/duke/exceptions/InvalidKeyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.exceptions;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class InvalidKeyException extends BaseException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public InvalidKeyException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(\"!!!ERROR: Sorry we can\u0027t recognize your instruction, please use valid one.\");","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public InvalidKeyException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(message);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"src/main/java/duke/exceptions/WrongFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.exceptions;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class WrongFormatException extends BaseException{","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public WrongFormatException() {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" super(\"!!!ERROR: Incorrect instruction format. The correct format is: \" + message);","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.tasks.*;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"public class Storage {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" private String filePath \u003d \"./data/duke.txt\";","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" private File file;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" public Storage() {","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" if (!this.file.getParentFile().exists())","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" if (!this.file.exists())","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" this.file.createNewFile();","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" return this.readFile();","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" /**","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" * read content of the file into task list.","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" * @return task list read from file","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" * @throws FileNotFoundException if the file is not found","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" private ArrayList\u003cTask\u003e readFile() throws FileNotFoundException{","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" Scanner s \u003d new Scanner(file); // create a Scanner using the File as the source","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" String currentTaskString \u003d s.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" Task newTask \u003d this.stringToTask(currentTaskString);","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" taskList.add(newTask);","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" return taskList;","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" /**","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" * write all the duke.tasks in the task list to the file stored","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" * @param taskList","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" * @throws IOException","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" public void writeTasksToFile(TaskList taskList) throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" FileWriter fw \u003d new FileWriter(this.filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" for(int i \u003d 0; i\u003c taskList.getNumOfTasks(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" fw.write(taskList.getTaskInfileStringFormat(i) + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" /**","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" * Change task from string format to task object","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" * @param str String format of the task","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" * @return The respective task object","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" private Task stringToTask(String str) {","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" String[] strSplit \u003d str.split(\"\\\\|\");","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" Boolean status \u003d strSplit[1].equals(\"1\");","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" String detail \u003d strSplit[2];","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" Task task \u003d new Task(status, detail);","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" switch (strSplit[0]) {","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" case \"T\":","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" task \u003d new Todo(status, detail);","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" case \"D\":","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":" String by \u003d strSplit[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":" task \u003d new Deadline(status, detail, by);","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" case \"E\":","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" String from \u003d strSplit[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":" String to \u003d strSplit[4];","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":" task \u003d new Event(status, detail, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Ella-e"},"content":" return task;","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":92}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import duke.utils.DukeDateFormater;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" private LocalDate by;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" private DukeDateFormater formater \u003d new DukeDateFormater();","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" public Deadline(Boolean status, String detail, String by) throws DateTimeParseException {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" super(status, detail);","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" this.by \u003d this.formater.stringToDate(by);","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" throw new InvalidDateTimeException();","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" return \"D|\" + super.inFileStringFormat() + \"|\" + this.by.toString();","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.formater.dateToString(this.by) + \")\";","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":31}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" private String start;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" private String by;","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" public Event(Boolean status, String detail, String start, String by) {","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" super(status, detail);","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" this.start \u003d start;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" return \"E|\" + super.inFileStringFormat() + \"|\" + this.start + \"|\" + this.by;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" return \"[E]\" + super.toString() + \"(from: \" + start + \" to: \" + by + \")\";","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":21}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" private Boolean status;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" private String detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" public Task(Boolean status, String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" this.status \u003d status;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" this.detail \u003d detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public Boolean getStatus() {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" return status;","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" public void setStatus(Boolean status) {","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" this.status \u003d status;","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" public String getDetail() {","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" return detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" public void setDetail(String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" this.detail \u003d detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" String intStatus \u003d this.status? \"1\":\"0\";","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" return intStatus + \"|\" + this.detail;","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" if (this.status) {","lastModifiedDate":"2024-01-22"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" return \"[X] \" + this.detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" } else {","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" return \"[ ] \" + this.detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":40}},{"path":"src/main/java/duke/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.InvalidDateTimeException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.InvalidKeyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.WrongFormatException;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import duke.utils.KeyEnum;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"public class TaskList {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" public TaskList() {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" public Integer getNumOfTasks() {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" return this.tasks.size();","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" public String getTaskInfileStringFormat(Integer i) {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" return this.tasks.get(i).inFileStringFormat();","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" public void listTask() {","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" System.out.println((i+1)+\". \" + tasks.get(i));","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" public Task addTask(String detail, String from, String to, KeyEnum currentKey) throws WrongFormatException, InvalidDateTimeException {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" Task task \u003d null;","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" switch (currentKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" task \u003d new Deadline(false, detail, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" case TODO:","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" task \u003d new Todo(false, detail);","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" case EVENT:","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" task \u003d new Event(false, detail, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" // Throw empty body exception if the added","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" if (task\u003d\u003dnull || detail.length() \u003d\u003d 0) {","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" throw new WrongFormatException(\"The task body can not be empty. Please specify the task you want to add.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" return task;","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" public Task markTaskById(Integer id, Boolean status) throws IOException, InvalidKeyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" // Test if the id is out of bound","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" if (id \u003e\u003d this.getNumOfTasks()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException(\"Id out of bound\");","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" this.tasks.get(id).setStatus(status);","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" return this.tasks.get(id);","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" public Task deleteTaskById(Integer id) throws IOException, InvalidKeyException{","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" // Test if the id is out of bound","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" if (id \u003e\u003d this.getNumOfTasks()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException(\"Id out of bound\");","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" Task taskToDelete \u003d this.tasks.get(id);","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" this.tasks.remove(taskToDelete);","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" return taskToDelete;","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":75}},{"path":"src/main/java/duke/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" public Todo(Boolean status, String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" super(status, detail);","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" public String inFileStringFormat() {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" return \"T|\" + super.inFileStringFormat();","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":17}},{"path":"src/main/java/duke/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.ui;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.tasks.Task;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import duke.tasks.TaskList;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"public class UI {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" private Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" public void onEnter() {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Hello! I\u0027m Plaudern\\nWhat can I do for you?\");","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" public void showList(TaskList taskList) {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Here are the duke.tasks in your list:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" taskList.listTask();","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" public void onAddSuccess(Task task, Integer count) {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" this.showTaskListCount(count);","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" public void onMarkDone(Task task) {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" public void onUnmarkDone(Task task) {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" public void onDelete(Task task, TaskList taskList) {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" System.out.println(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" this.showTaskListCount(taskList.getNumOfTasks());","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" public void showErrorMsg(String msg) {","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" System.out.println(msg);","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Error occur when initiating the resources.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" public String getUserInput() {","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" public void onExit() {","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" public void showTaskListCount(Integer count) {","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" System.out.println(\"Now you have \"+ count +\" duke.tasks in the list.\" );","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":61}},{"path":"src/main/java/duke/utils/DukeDateFormater.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.utils;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"public class DukeDateFormater {","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" public LocalDate stringToDate(String dateStr) {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" return LocalDate.parse(dateStr);","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" public String dateToString(LocalDate date) {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":13}},{"path":"src/main/java/duke/utils/KeyEnum.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.utils;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"public enum KeyEnum {","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" EXITKEY(\"bye\"), LIST(\"list\"), MARK(\"mark\"), UNMARK(\"unmark\"), EVENT(\"event\"), DEADLINE(\"deadline\"), TODO(\"todo\"), DELETE(\"delete\"),INVALID(\"invalid\");","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" private String detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" KeyEnum(String detail) {","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" this.detail \u003d detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" return this.detail;","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":15}},{"path":"src/main/java/duke/utils/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"package duke.utils;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.EmptyBodyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.InvalidKeyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import duke.exceptions.WrongFormatException;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"public class Parser {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" private KeyEnum currentKey \u003d KeyEnum.INVALID;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" private String inputDetail;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" private String to;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" private String from;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" private Integer index;","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" public void parse(String userInput) throws InvalidKeyException, EmptyBodyException, WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" String[] userInputSplit \u003d userInput.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" this.determineCurrentKey(userInputSplit[0]);","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" switch (this.currentKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" if (userInput.length() \u003c\u003d 9) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" throw new EmptyBodyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" inputDetail \u003d userInput.substring(9, userInput.indexOf(\"/by\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" to \u003d userInput.substring(userInput.indexOf(\"/by\")+4);","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" throw new WrongFormatException(\"\\\"deadline content /by yyyy-mm-dd\\\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" case TODO:","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" if (userInput.length() \u003c\u003d 5) {","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" throw new EmptyBodyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" inputDetail \u003d userInput.substring(5);","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" case EVENT:","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" if (userInput.length() \u003c\u003d 6) {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" throw new EmptyBodyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" inputDetail \u003d userInput.substring(6, userInput.indexOf(\"/from\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" from \u003d userInput.substring(userInput.indexOf(\"/from\")+6, userInput.indexOf(\"/to\")-1);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" to \u003d userInput.substring(userInput.indexOf(\"/to\")+4);","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" throw new WrongFormatException(\"\\\"deadline content /from time /to time\\\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" case MARK:","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" case UNMARK:","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" case DELETE:","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" this.index \u003d new Integer(userInputSplit[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException(\"Please use a valid integer as key\");","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" public void determineCurrentKey(String userInputKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" switch (userInputKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" case \"bye\":","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.EXITKEY;","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" case \"list\":","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.LIST;","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":" case \"mark\":","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.MARK;","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.UNMARK;","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":" case \"event\":","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.EVENT;","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.DEADLINE;","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":" case \"todo\":","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.TODO;","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":" case \"delete\":","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":" currentKey \u003d KeyEnum.DELETE;","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Ella-e"},"content":" break;","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Ella-e"},"content":" if (this.currentKey.equals(KeyEnum.INVALID)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Ella-e"},"content":" // raise InvalidKeyException","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Ella-e"},"content":" throw new InvalidKeyException();","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Ella-e"},"content":" public KeyEnum getCurrentKey() {","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Ella-e"},"content":" return currentKey;","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Ella-e"},"content":" public void setCurrentKey(KeyEnum currentKey) {","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Ella-e"},"content":" this.currentKey \u003d currentKey;","lastModifiedDate":"2024-01-29"},{"lineNumber":98,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Ella-e"},"content":" public String getInputDetail() {","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Ella-e"},"content":" return inputDetail;","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Ella-e"},"content":" public void setInputDetail(String inputDetail) {","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Ella-e"},"content":" this.inputDetail \u003d inputDetail;","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":108,"author":{"gitId":"Ella-e"},"content":" public String getTo() {","lastModifiedDate":"2024-01-29"},{"lineNumber":109,"author":{"gitId":"Ella-e"},"content":" return to;","lastModifiedDate":"2024-01-29"},{"lineNumber":110,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":111,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":112,"author":{"gitId":"Ella-e"},"content":" public void setTo(String to) {","lastModifiedDate":"2024-01-29"},{"lineNumber":113,"author":{"gitId":"Ella-e"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-29"},{"lineNumber":114,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":115,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":116,"author":{"gitId":"Ella-e"},"content":" public String getFrom() {","lastModifiedDate":"2024-01-29"},{"lineNumber":117,"author":{"gitId":"Ella-e"},"content":" return from;","lastModifiedDate":"2024-01-29"},{"lineNumber":118,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":119,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":120,"author":{"gitId":"Ella-e"},"content":" public void setFrom(String from) {","lastModifiedDate":"2024-01-29"},{"lineNumber":121,"author":{"gitId":"Ella-e"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":123,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":124,"author":{"gitId":"Ella-e"},"content":" public Integer getIndex() {","lastModifiedDate":"2024-01-29"},{"lineNumber":125,"author":{"gitId":"Ella-e"},"content":" return index;","lastModifiedDate":"2024-01-29"},{"lineNumber":126,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":127,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":128,"author":{"gitId":"Ella-e"},"content":" public void setIndex(Integer index) {","lastModifiedDate":"2024-01-29"},{"lineNumber":129,"author":{"gitId":"Ella-e"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-29"},{"lineNumber":130,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":131,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":131}},{"path":"src/main/test/DukeDateFormaterTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"import org.junit.Assert;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"import org.junit.Test;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"import duke.utils.DukeDateFormater;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"public class DukeDateFormaterTest {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" public void testFormatDate() {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" DukeDateFormater formater \u003d new DukeDateFormater();","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" // Format date success - the string is valid","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" LocalDate date \u003d formater.stringToDate(\"2019-12-01\");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" Assert.assertEquals(\"2019-12-01\", date.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" // Format date fail - the string is not in valid date format","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" Assert.assertThrows(DateTimeParseException.class, ()-\u003e {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" LocalDate date2 \u003d formater.stringToDate(\"2019-12-99\");","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" });","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" // Format date fail - the string is not in valid date format","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" Assert.assertThrows(DateTimeParseException.class, ()-\u003e {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" LocalDate date2 \u003d formater.stringToDate(\"2019/12/01\");","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" });","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" // Format date fail - the string is not in valid date format","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" Assert.assertThrows(DateTimeParseException.class, ()-\u003e {","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" LocalDate date2 \u003d formater.stringToDate(\"abca-bc-ab\");","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" });","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Ella-e":32}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"todo borrow book","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"mark 3","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"mark 2","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"unmark 3","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"list","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"bye","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ella-e":11}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"Ella-e":1,"-":20}}] diff --git a/Ella-e_ip_master/commits.json b/Ella-e_ip_master/commits.json index 4eed8ab1..eabbc3c1 100644 --- a/Ella-e_ip_master/commits.json +++ b/Ella-e_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Ella-e":[{"date":"2024-01-21","commitResults":[{"hash":"94de7d549c35d530c7c15872dbedeca6dc288381","isMergeCommit":false,"messageTitle":"feat: Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"a11e150073d5d4efa9672830c041d2e4c5e73d4d","isMergeCommit":false,"messageTitle":"feat: Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}}]},{"date":"2024-01-22","commitResults":[{"hash":"b7e948ab8112139e0742d36a7add6d1b5fe66c94","isMergeCommit":false,"messageTitle":"feat: Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"47489eefabf97e503ef19678323e8cc0b3845ee1","isMergeCommit":false,"messageTitle":"feat: Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":8}}},{"hash":"cb411f211723d65ce775b24db3bbc0604cc0c98a","isMergeCommit":false,"messageTitle":"feat: Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":8}}},{"hash":"a43e36542de6e99d439a806e25c9397d8842ca23","isMergeCommit":false,"messageTitle":"feat: A-TextUiTesting: Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":12,"deletions":7}}},{"hash":"aa71d47b9482b9e969b5b3eac1a628d770647308","isMergeCommit":false,"messageTitle":"feat: Level 5. Handle Errors - check whether user input a valid instruction; check whether the instruction\u0027s body is emptyl; check if the format for the instruction is correct; check if the mark instruction provides a valid number that is within the availble task list range.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":25}}},{"hash":"e55ee16af5a4f5008e2f418d7330f318a726181e","isMergeCommit":false,"messageTitle":"feat: Level 6. Delete - delete tasks from list and error handling.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":5}}},{"hash":"00f500c23ae6b764fa90c09007b135532ea58853","isMergeCommit":false,"messageTitle":"feat: A-Enums - Adopt enumerates for instruction keywords.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":189,"deletions":133}}}]},{"date":"2024-01-29","commitResults":[{"hash":"7a7e7e376bcd2ae4855511ede5c41f53c206e0e1","isMergeCommit":false,"messageTitle":"feat: level-7: save into file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":130,"deletions":3},"md":{"insertions":1,"deletions":1}}},{"hash":"1376a770cb5b6da77bee807fde252e12e5a5a37b","isMergeCommit":false,"messageTitle":"feat: Level-8 Store LocalDate object as the time for Deadline class. display the date object in a different form.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":60,"deletions":6}}},{"hash":"fafcfe5305af38339d9918a08f35768542f9d110","isMergeCommit":false,"messageTitle":"feat: refract the project to make it mroe OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":364,"deletions":268},"md":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Ella-e":{"java":660,"md":1,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":13}},"authorContributionVariance":{"Ella-e":95577.52},"authorDisplayNameMap":{"Ella-e":"CS2103T-W08-2 MU Z..AOYU"}} +{"authorDailyContributionsMap":{"Ella-e":[{"date":"2024-01-21","commitResults":[{"hash":"94de7d549c35d530c7c15872dbedeca6dc288381","isMergeCommit":false,"messageTitle":"feat: Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"a11e150073d5d4efa9672830c041d2e4c5e73d4d","isMergeCommit":false,"messageTitle":"feat: Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}}]},{"date":"2024-01-22","commitResults":[{"hash":"b7e948ab8112139e0742d36a7add6d1b5fe66c94","isMergeCommit":false,"messageTitle":"feat: Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"47489eefabf97e503ef19678323e8cc0b3845ee1","isMergeCommit":false,"messageTitle":"feat: Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":8}}},{"hash":"cb411f211723d65ce775b24db3bbc0604cc0c98a","isMergeCommit":false,"messageTitle":"feat: Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":8}}},{"hash":"a43e36542de6e99d439a806e25c9397d8842ca23","isMergeCommit":false,"messageTitle":"feat: A-TextUiTesting: Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":12,"deletions":7}}},{"hash":"aa71d47b9482b9e969b5b3eac1a628d770647308","isMergeCommit":false,"messageTitle":"feat: Level 5. Handle Errors - check whether user input a valid instruction; check whether the instruction\u0027s body is emptyl; check if the format for the instruction is correct; check if the mark instruction provides a valid number that is within the availble task list range.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":25}}},{"hash":"e55ee16af5a4f5008e2f418d7330f318a726181e","isMergeCommit":false,"messageTitle":"feat: Level 6. Delete - delete tasks from list and error handling.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":5}}},{"hash":"00f500c23ae6b764fa90c09007b135532ea58853","isMergeCommit":false,"messageTitle":"feat: A-Enums - Adopt enumerates for instruction keywords.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":189,"deletions":133}}}]},{"date":"2024-01-29","commitResults":[{"hash":"7a7e7e376bcd2ae4855511ede5c41f53c206e0e1","isMergeCommit":false,"messageTitle":"feat: level-7: save into file","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":130,"deletions":3},"md":{"insertions":1,"deletions":1}}},{"hash":"1376a770cb5b6da77bee807fde252e12e5a5a37b","isMergeCommit":false,"messageTitle":"feat: Level-8 Store LocalDate object as the time for Deadline class. display the date object in a different form.","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":60,"deletions":6}}},{"hash":"fafcfe5305af38339d9918a08f35768542f9d110","isMergeCommit":false,"messageTitle":"feat: refract the project to make it mroe OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":364,"deletions":268},"md":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-30","commitResults":[{"hash":"50467ec3f27ff7bd9540557c48fe1b69e16e56ec","isMergeCommit":false,"messageTitle":"feat: put code into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":45,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":3,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"Ella-e":{"java":670,"md":3,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":14}},"authorContributionVariance":{"Ella-e":87823.63},"authorDisplayNameMap":{"Ella-e":"CS2103T-W08-2 MU Z..AOYU"}} diff --git a/HusseinSafwan02_ip_master/authorship.json b/HusseinSafwan02_ip_master/authorship.json index fe51488c..1b494e9d 100644 --- a/HusseinSafwan02_ip_master/authorship.json +++ b/HusseinSafwan02_ip_master/authorship.json @@ -1 +1 @@ -[] +[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"HusseinSafwan02"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"HusseinSafwan02"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"HusseinSafwan02"},"content":" String cat \u003d \"(\\\\_/)\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"HusseinSafwan02"},"content":" \"( •,•)\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"HusseinSafwan02"},"content":" \"(\\\")_(\\\")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"HusseinSafwan02"},"content":" System.out.println(\"RAWR!\\n\" + cat);","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"HusseinSafwan02"},"content":" String intro \u003d \"____________________________________________________________\\r\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"HusseinSafwan02"},"content":" \" Hello! I\u0027m Mickey\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"HusseinSafwan02"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"HusseinSafwan02"},"content":" \"____________________________________________________________\\r\\n\";","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"HusseinSafwan02"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"HusseinSafwan02"},"content":" String outro \u003d \"____________________________________________________________\\r\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"HusseinSafwan02"},"content":" \" Bye. See you soon!\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"HusseinSafwan02"},"content":" \"____________________________________________________________\\r\\n\";","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"HusseinSafwan02"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"HusseinSafwan02"},"content":" System.out.println(intro);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"HusseinSafwan02"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"HusseinSafwan02"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"HusseinSafwan02"},"content":" String userInput;","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"HusseinSafwan02"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"HusseinSafwan02"},"content":" while(true) {","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"HusseinSafwan02"},"content":" userInput \u003d sc.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"HusseinSafwan02"},"content":" if (userInput.equals(\"bye\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"HusseinSafwan02"},"content":" System.out.println(outro);","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"HusseinSafwan02"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"HusseinSafwan02"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"HusseinSafwan02"},"content":" System.out.println(userInput);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"HusseinSafwan02"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"HusseinSafwan02"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"HusseinSafwan02"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"HusseinSafwan02":30,"-":4}}] diff --git a/HusseinSafwan02_ip_master/commits.json b/HusseinSafwan02_ip_master/commits.json index 164c726e..058aadb7 100644 --- a/HusseinSafwan02_ip_master/commits.json +++ b/HusseinSafwan02_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"HusseinSafwan02":[]},"authorFileTypeContributionMap":{"HusseinSafwan02":{"java":0,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"HusseinSafwan02":0.0},"authorDisplayNameMap":{"HusseinSafwan02":"CS2103T-T16-4 MUHA..SEIN"}} +{"authorDailyContributionsMap":{"HusseinSafwan02":[{"date":"2024-01-30","commitResults":[{"hash":"8df1c580a7ed3c407beb0b9815d312ef0fbb545d","isMergeCommit":false,"messageTitle":"Rename, Greet and Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"ad5e2fc5ec3c44dbbc7986c51ba6c3edef0fd18e","isMergeCommit":false,"messageTitle":"Echo and \"bye\"","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"HusseinSafwan02":{"java":30,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"HusseinSafwan02":147.88887},"authorDisplayNameMap":{"HusseinSafwan02":"CS2103T-T16-4 MUHA..SEIN"}} diff --git a/KinTatHo_ip_master/authorship.json b/KinTatHo_ip_master/authorship.json index cba542bb..ea8865cd 100644 --- a/KinTatHo_ip_master/authorship.json +++ b/KinTatHo_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"# Yoda project template","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"3. After that, locate the `src/main/java/Yoda.java` file, right-click it, and choose `Run Yoda.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":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"Greetings! Yoda, I am","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"Assist you, may I?","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⠤⠐⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡌⡦⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⣼⡊⢀⠔⠀⠀⣄⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣄⣀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣶⠃⠉⠡⡠⠤⠊⠀⠠⣀⣀⡠⠔⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⢟⠿⠛⠛⠁","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡇⠀⠀⠀⠀⠑⠶⠖⠊⠁⠀⠀⠀⡀⠀⠀⠀⢀⣠⣤⣤⡀⠀⠀⠀⠀⠀⢀⣠⣤⣶⣿⣿⠟⡱⠁⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣾⣿⡇⠀⢀⡠⠀⠀⠀⠈⠑⢦⣄⣀⣀⣽⣦⣤⣾⣿⠿⠿⠿⣿⡆⠀⠀⢀⠺⣿⣿⣿⣿⡿⠁⡰⠁⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣧⣠⠊⣠⣶⣾⣿⣿⣶⣶⣿⣿⠿⠛⢿⣿⣫⢕⡠⢥⣈⠀⠙⠀⠰⣷⣿⣿⣿⡿⠋⢀⠜⠁⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢿⣿⣿⣿⣿⣰⣿⣿⠿⣛⡛⢛⣿⣿⣟⢅⠀⠀⢿⣿⠕⢺⣿⡇⠩⠓⠂⢀⠛⠛⠋⢁⣠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"⠘⢶⡶⢶⣶⣦⣤⣤⣤⣤⣤⣀⣀⣀⣀⡀⠀⠘⣿⣿⣿⠟⠁⡡⣒⣬⢭⢠⠝⢿⡡⠂⠀⠈⠻⣯⣖⣒⣺⡭⠂⢀⠈⣶⣶⣾⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠙⠳⣌⡛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣵⣨⣿⣿⡏⢀⠪⠎⠙⠿⣋⠴⡃⢸⣷⣤⣶⡾⠋⠈⠻⣶⣶⣶⣷⣶⣷⣿⣟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠈⠛⢦⣌⡙⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠩⠭⡭⠴⠊⢀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⡇⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠈⠙⠓⠦⣄⡉⠛⠛⠻⢿⣿⣿⣿⣷⡀⠀⠀⠀⠀⢀⣰⠋⠀⠀⠀⠀⠀⣀⣰⠤⣳⣿⣿⣿⣿⣟⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠒⠒⠶⢺⣿⣿⣿⣿⣦⣄⣀⣴⣿⣯⣤⣔⠒⠚⣒⣉⣉⣴⣾⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠹⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣉⣉⣤⣿⣿⣿⣿⣿⣿⡿⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⡁⡆⠙⢶⣀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣴⣶⣾⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢛⣩⣴⣿⠇⡇⠸⡆⠙⢷⣄⠻⣿⣦⡄⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣎⢻⣿⣿⣿⣿⣿⣿⣿⣭⣭⣭⣵⣶⣾⣿⣿⣿⠟⢰⢣⠀⠈⠀⠀⠙⢷⡎⠙⣿⣦⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⡟⣿⡆⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠟⠛⠋⠁⢀⠇⢸⡇⠀⠀⠀⠀⠈⠁⠀⢸⣿⡆⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡜⡿⡘⣿⣿⣿⣿⣿⣶⣶⣤⣤⣤⣤⣤⣤⣤⣴⡎⠖⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⣿⣷⡄⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠛⠋⡟⠀⠀⣸⣷⣀⣤⣀⣀⣀⣤⣤⣾⣿⣿⣿⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣓⡲⠬⢭⣙⡛⠿⣿⣿⣶⣦⣀⠀⡜⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣛⣓⠶⠦⠥⣀⠙⠋⠉⠉⠻⣄⣀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣆⠐⣦⣠⣷⠊⠁⠀⠀⡭⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢉⣛⡛⢻⡗⠂⠀⢀⣷⣄⠈⢆⠉⠙⠻⢿⣿⣿⣿⣿⣿⠇⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⡟⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣉⢁⣴⣿⣿⣿⣾⡇⢀⣀⣼⡿⣿⣷⡌⢻⣦⡀⠀⠈⠙⠛⠿⠏⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⡄⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠛⠛⢯⡉⠉⠉⠉⠉⠛⢼⣿⠿⠿⠦⡙⣿⡆⢹⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⠄⠈⠻⠿⠿⠿⠿⠿⠿⠛⠛⠿⠛⠉⠁⠀⠀⠀⠀⠀⠀⠻⠿⠿⠿⠿⠟⠉⠀⠀⠤⠴⠶⠌⠿⠘⠿⠿⠿⠿⠶⠤⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":"________________________________________________________","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":16,"KinTatHo":34}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"# User Guide for Yoda Chatbot","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"Yoda Chatbot is a task management assistant that helps you keep track of various tasks including todos, deadlines, and events.","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"### Adding a Task","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"You can add three types of tasks: todo, deadline, and event.","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"#### `todo` - Adds a todo task.","lastModifiedDate":"2024-01-28"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":"A todo task only contains a description.","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":"`todo read book`","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"Hmm, added this task, I have:","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"[T][ ] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 1, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"#### `deadline` - Adds a task with a deadline.","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"A deadline task contains a description and a date/time by which the task should be completed.","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"`deadline return book /by Sunday`","lastModifiedDate":"2024-01-28"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"Hmm, added this task, I have:","lastModifiedDate":"2024-01-28"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 2, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"#### `event` - Adds an event task.","lastModifiedDate":"2024-01-28"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"An event task contains a description and a start and end time.","lastModifiedDate":"2024-01-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"`event project meeting /from Monday 2pm /to 4pm`","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"Hmm, added this task, I have:","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"[E][ ] project meeting (from: Monday 2pm to: 4pm)","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 3, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"### Marking a Task as Done","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":"You can mark a task as completed.","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":"#### `mark` - Marks a task as done.","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":"`mark 1`","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":"Done, this task is:","lastModifiedDate":"2024-01-28"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":"[T][X] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":"### Marking a Task as Unone","lastModifiedDate":"2024-01-28"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":"You can unmark a task as completed.","lastModifiedDate":"2024-01-28"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":"#### `unmark` - Marks a task as done.","lastModifiedDate":"2024-01-28"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":"`unmark 1`","lastModifiedDate":"2024-01-28"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":64,"author":{"gitId":"KinTatHo"},"content":"Undone, this task remains:","lastModifiedDate":"2024-01-28"},{"lineNumber":65,"author":{"gitId":"KinTatHo"},"content":"[T][ ] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":69,"author":{"gitId":"KinTatHo"},"content":"### `list` - Lists all tasks","lastModifiedDate":"2024-01-28"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":71,"author":{"gitId":"KinTatHo"},"content":"Shows a list of all tasks in the task manager.","lastModifiedDate":"2024-01-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"KinTatHo"},"content":"`list`","lastModifiedDate":"2024-01-28"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":76,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":77,"author":{"gitId":"KinTatHo"},"content":"Tasks in your list, here they are:","lastModifiedDate":"2024-01-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":79,"author":{"gitId":"KinTatHo"},"content":"1. [T][X] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":80,"author":{"gitId":"KinTatHo"},"content":"2. [D][ ] return book (by: Sunday)","lastModifiedDate":"2024-01-28"},{"lineNumber":81,"author":{"gitId":"KinTatHo"},"content":"3. [E][ ] project meeting (from: Monday 2pm to: 4pm)","lastModifiedDate":"2024-01-28"},{"lineNumber":82,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":83,"author":{"gitId":"KinTatHo"},"content":"### Deleting a Task","lastModifiedDate":"2024-01-28"},{"lineNumber":84,"author":{"gitId":"KinTatHo"},"content":"You can delete a task from your list.","lastModifiedDate":"2024-01-28"},{"lineNumber":85,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":86,"author":{"gitId":"KinTatHo"},"content":"#### `delete` - Deletes a task.","lastModifiedDate":"2024-01-28"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":88,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":89,"author":{"gitId":"KinTatHo"},"content":"`delete 1`","lastModifiedDate":"2024-01-28"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"KinTatHo"},"content":"Removed, this task has been:","lastModifiedDate":"2024-01-28"},{"lineNumber":93,"author":{"gitId":"KinTatHo"},"content":"[T][X] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":94,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 2, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":96,"author":{"gitId":"KinTatHo"},"content":"### Exiting the Chatbot","lastModifiedDate":"2024-01-28"},{"lineNumber":97,"author":{"gitId":"KinTatHo"},"content":"You can exit the chatbot using the `bye` command.","lastModifiedDate":"2024-01-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":99,"author":{"gitId":"KinTatHo"},"content":"#### `bye` - Exits the application.","lastModifiedDate":"2024-01-28"},{"lineNumber":100,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":101,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":102,"author":{"gitId":"KinTatHo"},"content":"`bye`","lastModifiedDate":"2024-01-28"},{"lineNumber":103,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":104,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":105,"author":{"gitId":"KinTatHo"},"content":"Farewell. See you again, I hope!","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"-":22,"KinTatHo":83}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Enum representing the various commands that the Yoda chatbot can understand.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"enum Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" BYE, // Command to end the chat session","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" LIST, // Command to list all tasks","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" MARK, // Command to mark a task as done","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" UNMARK, // Command to mark a task as not done","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" TODO, // Command to add a new \u0027Todo\u0027 task","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" DEADLINE, // Command to add a new \u0027Deadline\u0027 task","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" DELETE, // Command to delete a task","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" EVENT, // Command to add a new \u0027Event\u0027 task","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" UNKNOWN, // Represents an unrecognized command","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" SAVE; // Command to save the current task list to disk","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" * Converts a string to its corresponding Command enum value. If the string","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" * does not match any command, UNKNOWN is returned.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" * @param str The input string representing a command.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" * @return The corresponding Command enum value, or UNKNOWN if no match is found.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" public static Command fromString(String str) {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" return Command.valueOf(str.toUpperCase());","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" return UNKNOWN; // Return UNKNOWN if the input string is not a valid command","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":31}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Represents a deadline task. It extends the Task class and adds a deadline time.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" private final String by; // Deadline time for the task","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" * Constructs a Deadline task with a description and a deadline time.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * @param description A string describing the deadline task.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * @param by A string representing the time by which the task should be completed.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" super(description); // Calls the constructor of the superclass Task","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" this.by \u003d by; // Sets the deadline time for this task","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" public String getBy() {","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" return this.by;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the deadline task, including its type,","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" * description, and deadline time.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string with the type of task, its description, and the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":33}},{"path":"src/main/java/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when an attempt is made to create a task with an empty description.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" * Constructs an EmptyDescriptionException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" * This exception is typically thrown when a task is created without a ","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * necessary description.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * @param message A string providing details about the exception cause.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":16}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Represents an event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" private final String from; // Event starting time","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" private final String to; // Event ending time","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * Constructs an Event task with a description, start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * @param description A string describing the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * @param from A string representing the start time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" * @param to A string representing the end time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" super(description); // Calls the constructor of the superclass Task","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" public String getFrom() {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" return this.from;","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" public String getTo() {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" return this.to;","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string with the type of task, its description,","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" * start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":39}},{"path":"src/main/java/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when an invalid task operation is attempted.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" * This can occur in various scenarios such as trying to access a task","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * that doesn\u0027t exist or providing an invalid task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * Constructs an InvalidTaskException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * This message provides information about what makes the task operation invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * @param message A string detailing the reason for the exception.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":17}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Represents a generic task with a description and a completion status.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" private final String description; // Description of the task","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" private boolean isDone; // Flag to track if the task is done","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * Constructs a Task with the given description. By default, the task is not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" this.isDone \u003d false; // Task is not done by default","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" * @return The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" return this.description;","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" * Gets the status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" * @return true if the task is done, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" public boolean isDone() {","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" return this.isDone;","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" * Marks the task as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":" * Marks the task as not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" public void markAsUndone() {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the task, including its done status and description.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + this.getDescription();","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":60}},{"path":"src/main/java/TimeMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when a required time information is missing.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" * This can occur in scenarios such as creating a deadline or event task","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * without specifying the necessary time details.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class TimeMissingException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * Constructs a TimeMissingException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * This message provides information about the missing time detail, ","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * which is essential for certain types of tasks (e.g., deadlines, events).","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" * @param message A string detailing the reason for the exception, ","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" * typically indicating which time information is missing.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" public TimeMissingException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":19}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Represents a \"Todo\" task. It is a simple task with only a description.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" * Constructs a todo task with the given description.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * @param description A string describing the todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" super(description); // Call to the superclass (Task) constructor","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" * The method overrides the Task class\u0027s toString method to add the specific","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" * identifier for Todo tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string representing the todo task,","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" * prefixed with \"[T]\" to denote a Todo type task.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" return \"[T]\" + super.toString(); // Adding the Todo identifier to the string representation","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":27}},{"path":"src/main/java/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when an unrecognized command is encountered.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" * This typically happens when user input does not match any of the expected commands.","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" * Constructs an UnknownCommandException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * The message usually indicates that the user input did not match any known command.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * @param message A string detailing the reason for the exception,","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * such as \"Unknown command entered\".","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":17}},{"path":"src/main/java/Yoda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * Main class for the Yoda chatbot application.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class Yoda {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" // Name of the chatbot is set to \"Yoda\".","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" String chatbotName \u003d \"Yoda\";","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" // Create an instance of the YodaUI class with the specified chatbot name.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" YodaUI yoda \u003d new YodaUI(chatbotName);","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" // Scanner to read user input from the console.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" // Display the initial greeting message from Yoda.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" yoda.printGreeting();","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" // Main loop to keep processing user input until the chatbot stops chatting.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" while (yoda.isChatting()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" // Read the next line of input from the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" // Handle the user\u0027s input and perform the appropriate action.","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" yoda.handleUserInput(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" } catch (EmptyDescriptionException | UnknownCommandException | InvalidTaskException | TimeMissingException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" // Catch specific exceptions and print their messages.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" yoda.printMessage(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" // Catch any other exceptions and throw a RuntimeException.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" // Close the scanner to prevent resource leaks.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" scanner.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"KinTatHo":40}},{"path":"src/main/java/YodaUI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"public class YodaUI {","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" private final ArrayList\u003cTask\u003e tasks; // List to store the tasks","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" private final String chatbotName; // Name of the chatbot","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" private boolean isChatting; // Flag to check if the chatbot is currently chatting","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" * Constructor to initialize the chatbot with a name.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" * @param chatbotName The name of the chatbot.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" public YodaUI(String chatbotName) {","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" this.chatbotName \u003d chatbotName;","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" this.isChatting \u003d true;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" * Checks if the chatbot is currently chatting.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" * @return true if chatting, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" public boolean isChatting() {","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" return this.isChatting;","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" * Marks a task as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" * @param taskNumber The number of the task to mark as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" public void markTaskAsDone(int taskNumber) {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Done, this task is:\\n\" + task);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":" * Marks a task as undone.","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" * @param taskNumber The number of the task to mark as not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" public void markTaskAsUndone(int taskNumber) {","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" task.markAsUndone();","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Undone, this task remains:\\n\" + task);","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":" * Deletes a task from the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":" * @param taskNumber The number of the task to be deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":" public void deleteTask(int taskNumber) {","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":" Task task \u003d tasks.remove(taskNumber - 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Removed, this task has been:\\n\" + task + \"\\nTasks in the list, now you have \" + tasks.size() + \", hmm.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":" * Adds a new task to the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"KinTatHo"},"content":" private void addTask(Task task) {","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"KinTatHo"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Hmm, added this task, I have:\\n\" + task + \"\\nTasks in the list, now you have \" + tasks.size() + \", hmm.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"KinTatHo"},"content":" * Displays all the tasks in the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"KinTatHo"},"content":" private void showTasks() {","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"KinTatHo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Empty, your task list is.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"KinTatHo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"KinTatHo"},"content":" StringBuilder response \u003d new StringBuilder(\"Tasks in your list, here they are:\\n\");","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"KinTatHo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"KinTatHo"},"content":" response.append(i + 1).append(\".\").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"KinTatHo"},"content":" printMessage(response.toString().trim());","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"KinTatHo"},"content":" * Handles user input and performs actions based on the command.","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"KinTatHo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception if there is an issue in processing the command.","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"KinTatHo"},"content":" public void handleUserInput(String input) throws Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"KinTatHo"},"content":" String[] parts \u003d input.split(\"\\\\s+\", 2);","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"KinTatHo"},"content":" Command command \u003d Command.fromString(parts[0]);","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"KinTatHo"},"content":" switch (command) {","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"KinTatHo"},"content":" case BYE:","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Farewell. See you again, I hope!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"KinTatHo"},"content":" this.isChatting \u003d false;","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"KinTatHo"},"content":" case LIST:","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"KinTatHo"},"content":" showTasks();","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"KinTatHo"},"content":" case SAVE:","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"KinTatHo"},"content":" saveTasks();","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"KinTatHo"},"content":" case DELETE:","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"KinTatHo"},"content":" performTaskOperation(parts, this::deleteTask);","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"KinTatHo"},"content":" case MARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"KinTatHo"},"content":" performTaskOperation(parts, this::markTaskAsDone);","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"KinTatHo"},"content":" case UNMARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"KinTatHo"},"content":" performTaskOperation(parts, this::markTaskAsUndone);","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"KinTatHo"},"content":" case TODO:","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"KinTatHo"},"content":" addTask(new Todo(parts[1]));","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"KinTatHo"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"KinTatHo"},"content":" String[] deadlineParts \u003d parts[1].split(\" /by \", 2);","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"KinTatHo"},"content":" addTask(new Deadline(deadlineParts[0], deadlineParts[1]));","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"KinTatHo"},"content":" case EVENT:","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"KinTatHo"},"content":" String[] eventParts \u003d parts[1].split(\" /from \", 2);","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"KinTatHo"},"content":" String[] timeParts \u003d eventParts[1].split(\" /to \", 2);","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"KinTatHo"},"content":" addTask(new Event(eventParts[0], timeParts[0], timeParts[1]));","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"KinTatHo"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Sorry, I am. What that means, I do not know :-(\");","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"KinTatHo"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"KinTatHo"},"content":" printMessage(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":138,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":139,"author":{"gitId":"KinTatHo"},"content":" * Performs a task operation (delete, mark, unmark) based on the user input.","lastModifiedDate":"2024-01-27"},{"lineNumber":140,"author":{"gitId":"KinTatHo"},"content":" * @param parts The split input containing the command and task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":141,"author":{"gitId":"KinTatHo"},"content":" * @param operation The operation to be performed on the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":142,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception if the task number is invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":143,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":144,"author":{"gitId":"KinTatHo"},"content":" private void performTaskOperation(String[] parts, TaskOperation operation) throws Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":145,"author":{"gitId":"KinTatHo"},"content":" if (parts.length \u003e 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":146,"author":{"gitId":"KinTatHo"},"content":" int taskNumber \u003d parseTaskNumber(parts[1]);","lastModifiedDate":"2024-01-27"},{"lineNumber":147,"author":{"gitId":"KinTatHo"},"content":" operation.perform(taskNumber);","lastModifiedDate":"2024-01-27"},{"lineNumber":148,"author":{"gitId":"KinTatHo"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":149,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Specify a task number, you must.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":150,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":151,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":152,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":153,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":154,"author":{"gitId":"KinTatHo"},"content":" * Parses the task number from the input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":155,"author":{"gitId":"KinTatHo"},"content":" * @param input The input string containing the task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":156,"author":{"gitId":"KinTatHo"},"content":" * @return The parsed task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":157,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception if the input is not a valid number or out of range.","lastModifiedDate":"2024-01-27"},{"lineNumber":158,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":159,"author":{"gitId":"KinTatHo"},"content":" private int parseTaskNumber(String input) throws Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":160,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":161,"author":{"gitId":"KinTatHo"},"content":" int taskNumber \u003d Integer.parseInt(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":162,"author":{"gitId":"KinTatHo"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":163,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Valid task number, provide you must.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":164,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":165,"author":{"gitId":"KinTatHo"},"content":" return taskNumber;","lastModifiedDate":"2024-01-27"},{"lineNumber":166,"author":{"gitId":"KinTatHo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":167,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"A number, enter you must.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":168,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":169,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":170,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":171,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":172,"author":{"gitId":"KinTatHo"},"content":" * Prints a message wrapped with lines for better readability.","lastModifiedDate":"2024-01-27"},{"lineNumber":173,"author":{"gitId":"KinTatHo"},"content":" * @param message The message to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":174,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":175,"author":{"gitId":"KinTatHo"},"content":" public void printMessage(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":176,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":177,"author":{"gitId":"KinTatHo"},"content":" System.out.println(\"\" + message);","lastModifiedDate":"2024-01-27"},{"lineNumber":178,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":179,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":180,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":181,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":182,"author":{"gitId":"KinTatHo"},"content":" * Functional interface for task operations like delete, mark, and unmark.","lastModifiedDate":"2024-01-27"},{"lineNumber":183,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":184,"author":{"gitId":"KinTatHo"},"content":" @FunctionalInterface","lastModifiedDate":"2024-01-27"},{"lineNumber":185,"author":{"gitId":"KinTatHo"},"content":" private interface TaskOperation {","lastModifiedDate":"2024-01-27"},{"lineNumber":186,"author":{"gitId":"KinTatHo"},"content":" void perform(int taskNumber) throws Exception;","lastModifiedDate":"2024-01-27"},{"lineNumber":187,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":188,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":189,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-28"},{"lineNumber":190,"author":{"gitId":"KinTatHo"},"content":" * Saves the current task list to a file called yoda.txt.","lastModifiedDate":"2024-01-28"},{"lineNumber":191,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-28"},{"lineNumber":192,"author":{"gitId":"KinTatHo"},"content":" public void saveTasks() {","lastModifiedDate":"2024-01-28"},{"lineNumber":193,"author":{"gitId":"KinTatHo"},"content":"// String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2024-01-28"},{"lineNumber":194,"author":{"gitId":"KinTatHo"},"content":"// System.out.println(\"Current directory: \" + currentDir);","lastModifiedDate":"2024-01-28"},{"lineNumber":195,"author":{"gitId":"KinTatHo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(\"./data/yoda.txt\"))) {","lastModifiedDate":"2024-01-28"},{"lineNumber":196,"author":{"gitId":"KinTatHo"},"content":" for (Task task : tasks) {","lastModifiedDate":"2024-01-28"},{"lineNumber":197,"author":{"gitId":"KinTatHo"},"content":" writer.write(taskToFileFormat(task) + System.lineSeparator());","lastModifiedDate":"2024-01-28"},{"lineNumber":198,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":199,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Saved, your task list has been.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":200,"author":{"gitId":"KinTatHo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":201,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":202,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":203,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":204,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":205,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-28"},{"lineNumber":206,"author":{"gitId":"KinTatHo"},"content":" * Converts a task to a formatted string suitable for file storage.","lastModifiedDate":"2024-01-28"},{"lineNumber":207,"author":{"gitId":"KinTatHo"},"content":" * @param task The task to convert.","lastModifiedDate":"2024-01-28"},{"lineNumber":208,"author":{"gitId":"KinTatHo"},"content":" * @return A string representing the task in the file format.","lastModifiedDate":"2024-01-28"},{"lineNumber":209,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-28"},{"lineNumber":210,"author":{"gitId":"KinTatHo"},"content":" private String taskToFileFormat(Task task) {","lastModifiedDate":"2024-01-28"},{"lineNumber":211,"author":{"gitId":"KinTatHo"},"content":" String status \u003d task.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2024-01-28"},{"lineNumber":212,"author":{"gitId":"KinTatHo"},"content":" String type \u003d task instanceof Todo ? \"T\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":213,"author":{"gitId":"KinTatHo"},"content":" task instanceof Deadline ? \"D\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":214,"author":{"gitId":"KinTatHo"},"content":" task instanceof Event ? \"E\" : \"\";","lastModifiedDate":"2024-01-28"},{"lineNumber":215,"author":{"gitId":"KinTatHo"},"content":" String details \u003d task.getDescription();","lastModifiedDate":"2024-01-28"},{"lineNumber":216,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":217,"author":{"gitId":"KinTatHo"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2024-01-28"},{"lineNumber":218,"author":{"gitId":"KinTatHo"},"content":" Deadline deadlineTask \u003d (Deadline) task;","lastModifiedDate":"2024-01-28"},{"lineNumber":219,"author":{"gitId":"KinTatHo"},"content":" details +\u003d \" | \" + deadlineTask.getBy();","lastModifiedDate":"2024-01-28"},{"lineNumber":220,"author":{"gitId":"KinTatHo"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2024-01-28"},{"lineNumber":221,"author":{"gitId":"KinTatHo"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2024-01-28"},{"lineNumber":222,"author":{"gitId":"KinTatHo"},"content":" details +\u003d \" | \" + eventTask.getFrom() + \" to \" + eventTask.getTo();","lastModifiedDate":"2024-01-28"},{"lineNumber":223,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":224,"author":{"gitId":"KinTatHo"},"content":" return type + \" | \" + status + \" | \" + details;","lastModifiedDate":"2024-01-28"},{"lineNumber":225,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":226,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":227,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":228,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":229,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":230,"author":{"gitId":"KinTatHo"},"content":" * Prints a line for visual separation in the console output.","lastModifiedDate":"2024-01-27"},{"lineNumber":231,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":232,"author":{"gitId":"KinTatHo"},"content":" private void printLine() {","lastModifiedDate":"2024-01-27"},{"lineNumber":233,"author":{"gitId":"KinTatHo"},"content":" System.out.println(\"________________________________________________________\");","lastModifiedDate":"2024-01-27"},{"lineNumber":234,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":235,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":236,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":237,"author":{"gitId":"KinTatHo"},"content":" * Prints a greeting message when the chatbot starts.","lastModifiedDate":"2024-01-27"},{"lineNumber":238,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":239,"author":{"gitId":"KinTatHo"},"content":" public void printGreeting() {","lastModifiedDate":"2024-01-27"},{"lineNumber":240,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":241,"author":{"gitId":"KinTatHo"},"content":" System.out.println(\"Greetings! \" + chatbotName + \", I am\\nAssist you, may I?\");","lastModifiedDate":"2024-01-27"},{"lineNumber":242,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":243,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":244,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":245,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"KinTatHo":245}},{"path":"text-ui-test/data/yoda.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"T | 1 | read book","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"D | 0 | return book | June 6th","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"T | 1 | join sports club","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"T | 0 | borrow book","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"KinTatHo":4}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"todo read book","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"deadline return book /by June 6th","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"todo join sports club","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"todo borrow book","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"mark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":"delete 3","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":"save","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"KinTatHo":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"java -classpath ..\\bin Yoda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"KinTatHo":1}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"java -classpath ../bin Yoda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"-":37,"KinTatHo":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"# Yoda project template","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"3. After that, locate the `src/main/java/Yoda.java` file, right-click it, and choose `Run Yoda.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":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"Greetings! Yoda, I am","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"Assist you, may I?","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⠤⠐⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡌⡦⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⣼⡊⢀⠔⠀⠀⣄⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣄⣀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣶⠃⠉⠡⡠⠤⠊⠀⠠⣀⣀⡠⠔⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⢟⠿⠛⠛⠁","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡇⠀⠀⠀⠀⠑⠶⠖⠊⠁⠀⠀⠀⡀⠀⠀⠀⢀⣠⣤⣤⡀⠀⠀⠀⠀⠀⢀⣠⣤⣶⣿⣿⠟⡱⠁⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣾⣿⡇⠀⢀⡠⠀⠀⠀⠈⠑⢦⣄⣀⣀⣽⣦⣤⣾⣿⠿⠿⠿⣿⡆⠀⠀⢀⠺⣿⣿⣿⣿⡿⠁⡰⠁⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣧⣠⠊⣠⣶⣾⣿⣿⣶⣶⣿⣿⠿⠛⢿⣿⣫⢕⡠⢥⣈⠀⠙⠀⠰⣷⣿⣿⣿⡿⠋⢀⠜⠁⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢿⣿⣿⣿⣿⣰⣿⣿⠿⣛⡛⢛⣿⣿⣟⢅⠀⠀⢿⣿⠕⢺⣿⡇⠩⠓⠂⢀⠛⠛⠋⢁⣠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"⠘⢶⡶⢶⣶⣦⣤⣤⣤⣤⣤⣀⣀⣀⣀⡀⠀⠘⣿⣿⣿⠟⠁⡡⣒⣬⢭⢠⠝⢿⡡⠂⠀⠈⠻⣯⣖⣒⣺⡭⠂⢀⠈⣶⣶⣾⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠙⠳⣌⡛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣵⣨⣿⣿⡏⢀⠪⠎⠙⠿⣋⠴⡃⢸⣷⣤⣶⡾⠋⠈⠻⣶⣶⣶⣷⣶⣷⣿⣟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠈⠛⢦⣌⡙⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠩⠭⡭⠴⠊⢀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⡇⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠈⠙⠓⠦⣄⡉⠛⠛⠻⢿⣿⣿⣿⣷⡀⠀⠀⠀⠀⢀⣰⠋⠀⠀⠀⠀⠀⣀⣰⠤⣳⣿⣿⣿⣿⣟⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠒⠒⠶⢺⣿⣿⣿⣿⣦⣄⣀⣴⣿⣯⣤⣔⠒⠚⣒⣉⣉⣴⣾⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠹⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣉⣉⣤⣿⣿⣿⣿⣿⣿⡿⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⡁⡆⠙⢶⣀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣴⣶⣾⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢛⣩⣴⣿⠇⡇⠸⡆⠙⢷⣄⠻⣿⣦⡄⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣎⢻⣿⣿⣿⣿⣿⣿⣿⣭⣭⣭⣵⣶⣾⣿⣿⣿⠟⢰⢣⠀⠈⠀⠀⠙⢷⡎⠙⣿⣦⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⡟⣿⡆⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠟⠛⠋⠁⢀⠇⢸⡇⠀⠀⠀⠀⠈⠁⠀⢸⣿⡆⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡜⡿⡘⣿⣿⣿⣿⣿⣶⣶⣤⣤⣤⣤⣤⣤⣤⣴⡎⠖⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⣿⣷⡄⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠛⠋⡟⠀⠀⣸⣷⣀⣤⣀⣀⣀⣤⣤⣾⣿⣿⣿⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣓⡲⠬⢭⣙⡛⠿⣿⣿⣶⣦⣀⠀⡜⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣛⣓⠶⠦⠥⣀⠙⠋⠉⠉⠻⣄⣀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣆⠐⣦⣠⣷⠊⠁⠀⠀⡭⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢉⣛⡛⢻⡗⠂⠀⢀⣷⣄⠈⢆⠉⠙⠻⢿⣿⣿⣿⣿⣿⠇⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⡟⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣉⢁⣴⣿⣿⣿⣾⡇⢀⣀⣼⡿⣿⣷⡌⢻⣦⡀⠀⠈⠙⠛⠿⠏⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⡄⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠛⠛⢯⡉⠉⠉⠉⠉⠛⢼⣿⠿⠿⠦⡙⣿⡆⢹⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⠄⠈⠻⠿⠿⠿⠿⠿⠿⠛⠛⠿⠛⠉⠁⠀⠀⠀⠀⠀⠀⠻⠿⠿⠿⠿⠟⠉⠀⠀⠤⠴⠶⠌⠿⠘⠿⠿⠿⠿⠶⠤⠀⠀⠀⠀","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":"________________________________________________________","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":16,"KinTatHo":34}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"# User Guide for Yoda Chatbot","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"Yoda Chatbot is a task management assistant that helps you keep track of various tasks including todos, deadlines, and events.","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"### Adding a Task","lastModifiedDate":"2024-01-28"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"You can add three types of tasks: todo, deadline, and event.","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"#### `todo` - Adds a todo task.","lastModifiedDate":"2024-01-28"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":"A todo task only contains a description.","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":"`todo read book`","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"Hmm, added this task, I have:","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"[T][ ] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 1, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"#### `deadline` - Adds a task with a deadline.","lastModifiedDate":"2024-01-28"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"A deadline task contains a description and a date/time by which the task should be completed.","lastModifiedDate":"2024-01-28"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"`deadline return book /by Sunday`","lastModifiedDate":"2024-01-28"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"Hmm, added this task, I have:","lastModifiedDate":"2024-01-28"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 2, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"#### `event` - Adds an event task.","lastModifiedDate":"2024-01-28"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"An event task contains a description and a start and end time.","lastModifiedDate":"2024-01-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"`event project meeting /from Monday 2pm /to 4pm`","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"Hmm, added this task, I have:","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"[E][ ] project meeting (from: Monday 2pm to: 4pm)","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 3, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"### Marking a Task as Done","lastModifiedDate":"2024-01-28"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":"You can mark a task as completed.","lastModifiedDate":"2024-01-28"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":"#### `mark` - Marks a task as done.","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":"`mark 1`","lastModifiedDate":"2024-01-28"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":"Done, this task is:","lastModifiedDate":"2024-01-28"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":"[T][X] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":"### Marking a Task as Unone","lastModifiedDate":"2024-01-28"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":"You can unmark a task as completed.","lastModifiedDate":"2024-01-28"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":"#### `unmark` - Marks a task as done.","lastModifiedDate":"2024-01-28"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":"`unmark 1`","lastModifiedDate":"2024-01-28"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":64,"author":{"gitId":"KinTatHo"},"content":"Undone, this task remains:","lastModifiedDate":"2024-01-28"},{"lineNumber":65,"author":{"gitId":"KinTatHo"},"content":"[T][ ] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":"## Usage","lastModifiedDate":"2019-07-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":69,"author":{"gitId":"KinTatHo"},"content":"### `list` - Lists all tasks","lastModifiedDate":"2024-01-28"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":71,"author":{"gitId":"KinTatHo"},"content":"Shows a list of all tasks in the task manager.","lastModifiedDate":"2024-01-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"KinTatHo"},"content":"`list`","lastModifiedDate":"2024-01-28"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":76,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":77,"author":{"gitId":"KinTatHo"},"content":"Tasks in your list, here they are:","lastModifiedDate":"2024-01-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":79,"author":{"gitId":"KinTatHo"},"content":"1. [T][X] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":80,"author":{"gitId":"KinTatHo"},"content":"2. [D][ ] return book (by: Sunday)","lastModifiedDate":"2024-01-28"},{"lineNumber":81,"author":{"gitId":"KinTatHo"},"content":"3. [E][ ] project meeting (from: Monday 2pm to: 4pm)","lastModifiedDate":"2024-01-28"},{"lineNumber":82,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":83,"author":{"gitId":"KinTatHo"},"content":"### Deleting a Task","lastModifiedDate":"2024-01-28"},{"lineNumber":84,"author":{"gitId":"KinTatHo"},"content":"You can delete a task from your list.","lastModifiedDate":"2024-01-28"},{"lineNumber":85,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":86,"author":{"gitId":"KinTatHo"},"content":"#### `delete` - Deletes a task.","lastModifiedDate":"2024-01-28"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":88,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":89,"author":{"gitId":"KinTatHo"},"content":"`delete 1`","lastModifiedDate":"2024-01-28"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"Expected outcome:","lastModifiedDate":"2019-07-29"},{"lineNumber":92,"author":{"gitId":"KinTatHo"},"content":"Removed, this task has been:","lastModifiedDate":"2024-01-28"},{"lineNumber":93,"author":{"gitId":"KinTatHo"},"content":"[T][X] read book","lastModifiedDate":"2024-01-28"},{"lineNumber":94,"author":{"gitId":"KinTatHo"},"content":"Tasks in the list, now you have 2, hmm.","lastModifiedDate":"2024-01-28"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":96,"author":{"gitId":"KinTatHo"},"content":"### Exiting the Chatbot","lastModifiedDate":"2024-01-28"},{"lineNumber":97,"author":{"gitId":"KinTatHo"},"content":"You can exit the chatbot using the `bye` command.","lastModifiedDate":"2024-01-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":99,"author":{"gitId":"KinTatHo"},"content":"#### `bye` - Exits the application.","lastModifiedDate":"2024-01-28"},{"lineNumber":100,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":101,"author":{"gitId":"KinTatHo"},"content":"Example of usage:","lastModifiedDate":"2024-01-28"},{"lineNumber":102,"author":{"gitId":"KinTatHo"},"content":"`bye`","lastModifiedDate":"2024-01-28"},{"lineNumber":103,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":104,"author":{"gitId":"KinTatHo"},"content":"Expected outcome:","lastModifiedDate":"2024-01-28"},{"lineNumber":105,"author":{"gitId":"KinTatHo"},"content":"Farewell. See you again, I hope!","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"-":22,"KinTatHo":83}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Enum representing the various commands that the Yoda chatbot can understand.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"enum Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" BYE, // Command to end the chat session","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" LIST, // Command to list all tasks","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" MARK, // Command to mark a task as done","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" UNMARK, // Command to mark a task as not done","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" TODO, // Command to add a new \u0027Todo\u0027 task","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" DEADLINE, // Command to add a new \u0027Deadline\u0027 task","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" DELETE, // Command to delete a task","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" EVENT, // Command to add a new \u0027Event\u0027 task","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" UNKNOWN, // Represents an unrecognized command","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" SAVE; // Command to save the current task list to disk","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" * Converts a string to its corresponding Command enum value. If the string","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" * does not match any command, UNKNOWN is returned.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" * @param str The input string representing a command.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" * @return The corresponding Command enum value, or UNKNOWN if no match is found.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" public static Command fromString(String str) {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" return Command.valueOf(str.toUpperCase());","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" return UNKNOWN; // Return UNKNOWN if the input string is not a valid command","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":31}},{"path":"src/main/java/DateTimeUtil.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"import java.util.Arrays;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"public class DateTimeUtil {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" private static final List\u003cDateTimeFormatter\u003e FORMATTERS \u003d Arrays.asList(","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"dd MMM\"), // e.g., 30 Jan","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"MMM dd\"), // e.g., Jan 30","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd \"), // e.g., 2024-01-30","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"), // e.g., 2024-01-30 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"d MMM yyyy\"), // e.g., 30 Jan 2024","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"d MMM yyyy HHmm\"), // e.g., 30 Jan 2024 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"d MMMM yyyy\"), // e.g., 30 January 2024","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"d MMMM yyyy HHmm\"), // e.g., 30 January 2024 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"), // e.g., 30/01/2024","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"), // e.g., 30/01/2024 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy\"), // e.g., 30-01-2024","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"), // e.g., 30-01-2024 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"yyyy/MM/dd\"), // e.g., 2024/01/30","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"yyyy/MM/dd HHmm\"), // e.g., 2024/01/30 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"yyyyMMdd\"), // e.g., 20240130","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter.ofPattern(\"yyyyMMdd HHmm\") // e.g., 20240130 1306","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" );","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" public static LocalDateTime parseDateTime(String dateTimeStr) throws DateTimeParseException {","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" for (DateTimeFormatter formatter : FORMATTERS) {","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" return LocalDateTime.parse(dateTimeStr, formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" // Try the next format","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" throw new DateTimeParseException(\"Failed to parse date-time: \" + dateTimeStr, dateTimeStr, 0);","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"KinTatHo":38}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * Represents a deadline task. It extends the Task class and adds a deadline time.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" private final LocalDateTime by; // Deadline time for the task","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * Constructs a Deadline task with a description and a deadline time.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * @param description A string describing the deadline task.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" * @param by A string representing the time by which the task should be completed.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" super(description); // Calls the constructor of the superclass Task","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" this.by \u003d by; // Sets the deadline time for this task","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the deadline time of the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" * @return The deadline time of the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" public LocalDateTime getBy() {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" return this.by;","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the deadline time of the task as a string.","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" * @return The deadline time of the task as a string.","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" public String getByString() {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" return this.by.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the deadline task, including its type,","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" * description, and deadline time.","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string with the type of task, its description, and the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(formatter) + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":51}},{"path":"src/main/java/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when an attempt is made to create a task with an empty description.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class EmptyDescriptionException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" * Constructs an EmptyDescriptionException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" * This exception is typically thrown when a task is created without a ","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * necessary description.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * @param message A string providing details about the exception cause.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" public EmptyDescriptionException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":16}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * Represents an event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" private final LocalDateTime from; // Event starting time","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" private final LocalDateTime to; // Event ending time","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * Constructs an Event task with a description, start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" * @param description A string describing the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" * @param from A string representing the start time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" * @param to A string representing the end time of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" super(description); // Calls the constructor of the superclass Task","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the start time of the event.","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" * @return The start time of the event.","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" public LocalDateTime getFrom() {","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" return this.from;","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the start time of the event as a string.","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" * @return The start time of the event as a string.","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" public String getFromString() {","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" return this.from.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the end time of the event.","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":" * @return The end time of the event.","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" public LocalDateTime getTo() {","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" return this.to;","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the end time of the event as a string.","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":" * @return The end time of the event as a string.","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":" public String getToString() {","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":" return this.to.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string with the type of task, its description,","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":" * start time, and end time.","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"KinTatHo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from.format(formatter) + \" to: \" + this.to + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":70}},{"path":"src/main/java/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when an invalid task operation is attempted.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" * This can occur in various scenarios such as trying to access a task","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * that doesn\u0027t exist or providing an invalid task number.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * Constructs an InvalidTaskException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * This message provides information about what makes the task operation invalid.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * @param message A string detailing the reason for the exception.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" public InvalidTaskException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":17}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class Parser {","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" private YodaUI yodaUI;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * Constructor for CommandParser.","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * @param yodaUI The instance of YodaUI to interact with the task list.","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" public Parser(YodaUI yodaUI) {","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" this.yodaUI \u003d yodaUI;","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" * Parses the user input and executes the corresponding command.","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" * @param input The input string provided by the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception if an error occurs during command execution.","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" public void parseAndExecute(String input) throws Exception {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" String[] parts \u003d input.split(\"\\\\s+\", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" Command command \u003d Command.fromString(parts[0]);","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" switch (command) {","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" case BYE:","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" yodaUI.printMessage(\"Farewell. See you again, I hope!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" yodaUI.stopChatting();","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" case LIST:","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" yodaUI.showTasks();","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" case SAVE:","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" yodaUI.saveTasks();","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" case DELETE:","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" performTaskOperation(parts, yodaUI::deleteTask);","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":" case MARK:","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":" performTaskOperation(parts, yodaUI::markTaskAsDone);","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":" case UNMARK:","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" performTaskOperation(parts, yodaUI::markTaskAsUndone);","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" case TODO:","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" yodaUI.addTask(new Todo(parts[1]));","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":" addTaskWithDateTime(parts, Command.DEADLINE);","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":" case EVENT:","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":" addTaskWithDateTime(parts, Command.EVENT);","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":" default:","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":" yodaUI.printMessage(\"Sorry, I am. What that means, I do not know :-(\");","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":" yodaUI.printMessage(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"KinTatHo"},"content":" * Adds a task with a date and time to the task list.","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"KinTatHo"},"content":" * @param parts The split input containing the command and task description.","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"KinTatHo"},"content":" * @param commandType The type of task to add (deadline or event).","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception if the task description or time is missing.","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"KinTatHo"},"content":" private void addTaskWithDateTime(String[] parts, Command commandType) throws Exception {","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"KinTatHo"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Required, a task description and time are, hmm.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"KinTatHo"},"content":" String[] taskParts \u003d parts[1].split(\" /by | /from \", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"KinTatHo"},"content":" if (taskParts.length \u003c 2) {","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Required, the task time is, yes.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"KinTatHo"},"content":" if (commandType \u003d\u003d Command.DEADLINE) {","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"KinTatHo"},"content":" LocalDateTime by \u003d DateTimeUtil.parseDateTime(taskParts[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"KinTatHo"},"content":" yodaUI.addTask(new Deadline(taskParts[0], by));","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"KinTatHo"},"content":" } else if (commandType \u003d\u003d Command.EVENT) {","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"KinTatHo"},"content":" String[] timeParts \u003d taskParts[1].split(\" /to \", 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"KinTatHo"},"content":" if (timeParts.length \u003c 2) {","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Required, the event end time is, yes.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"KinTatHo"},"content":" LocalDateTime from \u003d DateTimeUtil.parseDateTime(timeParts[0]);","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"KinTatHo"},"content":" LocalDateTime to \u003d DateTimeUtil.parseDateTime(timeParts[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"KinTatHo"},"content":" yodaUI.addTask(new Event(taskParts[0], from, to));","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"KinTatHo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Invalid, the date format is. Use one of the accepted formats, you must.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":94,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"KinTatHo"},"content":" * Parses the task number from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"KinTatHo"},"content":" * @param input","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"KinTatHo"},"content":" * @return","lastModifiedDate":"2024-01-30"},{"lineNumber":101,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception","lastModifiedDate":"2024-01-30"},{"lineNumber":102,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":103,"author":{"gitId":"KinTatHo"},"content":" private int parseTaskNumber(String input) throws Exception {","lastModifiedDate":"2024-01-30"},{"lineNumber":104,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":105,"author":{"gitId":"KinTatHo"},"content":" int taskNumber \u003d Integer.parseInt(input);","lastModifiedDate":"2024-01-30"},{"lineNumber":106,"author":{"gitId":"KinTatHo"},"content":" if (taskNumber \u003c\u003d 0 || taskNumber \u003e yodaUI.getTaskCount()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":107,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Valid task number, provide you must.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":108,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":109,"author":{"gitId":"KinTatHo"},"content":" return taskNumber;","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"KinTatHo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":111,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"A number, enter you must.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":113,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":115,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":116,"author":{"gitId":"KinTatHo"},"content":" * Performs a task operation (delete, mark, unmark) based on the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":117,"author":{"gitId":"KinTatHo"},"content":" * @param parts The split input containing the command and task number.","lastModifiedDate":"2024-01-30"},{"lineNumber":118,"author":{"gitId":"KinTatHo"},"content":" * @param operation The operation to be performed on the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"KinTatHo"},"content":" * @throws Exception if the task number is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":120,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":121,"author":{"gitId":"KinTatHo"},"content":" private void performTaskOperation(String[] parts, TaskOperation operation) throws Exception {","lastModifiedDate":"2024-01-30"},{"lineNumber":122,"author":{"gitId":"KinTatHo"},"content":" if (parts.length \u003e 1) {","lastModifiedDate":"2024-01-30"},{"lineNumber":123,"author":{"gitId":"KinTatHo"},"content":" int taskNumber \u003d this.parseTaskNumber(parts[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":124,"author":{"gitId":"KinTatHo"},"content":" operation.perform(taskNumber);","lastModifiedDate":"2024-01-30"},{"lineNumber":125,"author":{"gitId":"KinTatHo"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":126,"author":{"gitId":"KinTatHo"},"content":" throw new Exception(\"Specify a task number, you must.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":127,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":128,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":129,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":130,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":131,"author":{"gitId":"KinTatHo"},"content":" * Functional interface for task operations like delete, mark, and unmark.","lastModifiedDate":"2024-01-30"},{"lineNumber":132,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":133,"author":{"gitId":"KinTatHo"},"content":" @FunctionalInterface","lastModifiedDate":"2024-01-30"},{"lineNumber":134,"author":{"gitId":"KinTatHo"},"content":" private interface TaskOperation {","lastModifiedDate":"2024-01-30"},{"lineNumber":135,"author":{"gitId":"KinTatHo"},"content":" void perform(int taskNumber) throws Exception;","lastModifiedDate":"2024-01-30"},{"lineNumber":136,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":137,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":138,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"KinTatHo":138}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * Represents a generic task with a description and a completion status.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" private final String description; // Description of the task","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" private boolean isDone; // Flag to track if the task is done","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * Constructs a Task with the given description. By default, the task is not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" this.isDone \u003d false; // Task is not done by default","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" * @return The description of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" public String getDescription() {","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" return this.description;","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" * Gets the status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" * @return true if the task is done, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" public boolean isDone() {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" return this.isDone;","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":" * Marks the task as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" public void markAsDone() {","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" * Marks the task as not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" public void markAsUndone() {","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the task, including its done status and description.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string representing the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + this.getDescription();","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":63}},{"path":"src/main/java/TimeMissingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when a required time information is missing.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" * This can occur in scenarios such as creating a deadline or event task","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * without specifying the necessary time details.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class TimeMissingException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * Constructs a TimeMissingException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" * This message provides information about the missing time detail, ","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * which is essential for certain types of tasks (e.g., deadlines, events).","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" * @param message A string detailing the reason for the exception, ","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" * typically indicating which time information is missing.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" public TimeMissingException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":19}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Represents a \"Todo\" task. It is a simple task with only a description.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" * Constructs a todo task with the given description.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * @param description A string describing the todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" super(description); // Call to the superclass (Task) constructor","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" * The method overrides the Task class\u0027s toString method to add the specific","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" * identifier for Todo tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" * @return A formatted string representing the todo task,","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" * prefixed with \"[T]\" to denote a Todo type task.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" public String toString() {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" return \"[T]\" + super.toString(); // Adding the Todo identifier to the string representation","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"KinTatHo":27}},{"path":"src/main/java/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" * Exception thrown when an unrecognized command is encountered.","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" * This typically happens when user input does not match any of the expected commands.","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" * Constructs an UnknownCommandException with a detailed message.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" * The message usually indicates that the user input did not match any known command.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" * @param message A string detailing the reason for the exception,","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" * such as \"Unknown command entered\".","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" public UnknownCommandException(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" super(message); // Call to the superclass (Exception) constructor with the detailed message","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"KinTatHo":17}},{"path":"src/main/java/Yoda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":" * Main class for the Yoda chatbot application.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"public class Yoda {","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":" // Name of the chatbot is set to \"Yoda\".","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":" String chatbotName \u003d \"Yoda\";","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" // Create an instance of the YodaUI class with the specified chatbot name.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" YodaUI yoda \u003d new YodaUI(chatbotName);","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" // Scanner to read user input from the console.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" Parser commandParser \u003d new Parser(yoda);","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" // Display the initial greeting message from Yoda.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" yoda.printGreeting();","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" // Main loop to keep processing user input until the chatbot stops chatting.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" while (yoda.isChatting()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":" // Read the next line of input from the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" // Use CommandParser to handle the user input","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" commandParser.parseAndExecute(input);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" } catch (EmptyDescriptionException | UnknownCommandException | InvalidTaskException | TimeMissingException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" yoda.printMessage(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":" // For any other exceptions, print an error message","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" yoda.printMessage(\"Error occurred: \" + e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" // Close the scanner to prevent resource leaks.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" scanner.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"KinTatHo":40}},{"path":"src/main/java/YodaUI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":"public class YodaUI {","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":" private final ArrayList\u003cTask\u003e tasks; // List to store the tasks","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":" private final String chatbotName; // Name of the chatbot","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":" private boolean isChatting; // Flag to check if the chatbot is currently chatting","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":" * Constructor to initialize the chatbot with a name.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":" * @param chatbotName The name of the chatbot.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":" public YodaUI(String chatbotName) {","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":" this.chatbotName \u003d chatbotName;","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":" this.isChatting \u003d true;","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":" * Checks if the chatbot is currently chatting.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":" * @return true if chatting, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":" public boolean isChatting() {","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":" return this.isChatting;","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":" * Stops the chatbot from chatting.","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":" public void stopChatting() {","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":" this.isChatting \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":" * Marks a task as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":" * @param taskNumber The number of the task to mark as done.","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":" public void markTaskAsDone(int taskNumber) {","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Done, this task is:\\n\" + task);","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":" * Marks a task as undone.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":" * @param taskNumber The number of the task to mark as not done.","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"KinTatHo"},"content":" public void markTaskAsUndone(int taskNumber) {","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"KinTatHo"},"content":" Task task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"KinTatHo"},"content":" task.markAsUndone();","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Undone, this task remains:\\n\" + task);","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"KinTatHo"},"content":" * Deletes a task from the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"KinTatHo"},"content":" * @param taskNumber The number of the task to be deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"KinTatHo"},"content":" public void deleteTask(int taskNumber) {","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"KinTatHo"},"content":" Task task \u003d tasks.remove(taskNumber - 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Removed, this task has been:\\n\" + task + \"\\nTasks in the list, now you have \" + tasks.size() + \", hmm.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"KinTatHo"},"content":" * Adds a new task to the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"KinTatHo"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"KinTatHo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"KinTatHo"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Hmm, added this task, I have:\\n\" + task + \"\\nTasks in the list, now you have \" + tasks.size() + \", hmm.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"KinTatHo"},"content":" * Displays all the tasks in the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"KinTatHo"},"content":" public void showTasks() {","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"KinTatHo"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Empty, your task list is.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"KinTatHo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"KinTatHo"},"content":" StringBuilder response \u003d new StringBuilder(\"Tasks in your list, here they are:\\n\");","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"KinTatHo"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"KinTatHo"},"content":" response.append(i + 1).append(\".\").append(tasks.get(i)).append(\"\\n\");","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"KinTatHo"},"content":" printMessage(response.toString().trim());","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"KinTatHo"},"content":" // You might need a method in YodaUI to get the size of the task list","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"KinTatHo"},"content":" public int getTaskCount() {","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"KinTatHo"},"content":" return tasks.size();","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"KinTatHo"},"content":" * Prints a message wrapped with lines for better readability.","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"KinTatHo"},"content":" * @param message The message to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"KinTatHo"},"content":" public void printMessage(String message) {","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"KinTatHo"},"content":" System.out.println(\"\" + message);","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-28"},{"lineNumber":114,"author":{"gitId":"KinTatHo"},"content":" * Saves the current task list to a file called yoda.txt.","lastModifiedDate":"2024-01-28"},{"lineNumber":115,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-28"},{"lineNumber":116,"author":{"gitId":"KinTatHo"},"content":" public void saveTasks() {","lastModifiedDate":"2024-01-28"},{"lineNumber":117,"author":{"gitId":"KinTatHo"},"content":"// String currentDir \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2024-01-28"},{"lineNumber":118,"author":{"gitId":"KinTatHo"},"content":"// System.out.println(\"Current directory: \" + currentDir);","lastModifiedDate":"2024-01-28"},{"lineNumber":119,"author":{"gitId":"KinTatHo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(\"./data/yoda.txt\"))) {","lastModifiedDate":"2024-01-28"},{"lineNumber":120,"author":{"gitId":"KinTatHo"},"content":" for (Task task : tasks) {","lastModifiedDate":"2024-01-28"},{"lineNumber":121,"author":{"gitId":"KinTatHo"},"content":" writer.write(taskToFileFormat(task) + System.lineSeparator());","lastModifiedDate":"2024-01-28"},{"lineNumber":122,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":123,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Saved, your task list has been.\");","lastModifiedDate":"2024-01-28"},{"lineNumber":124,"author":{"gitId":"KinTatHo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-28"},{"lineNumber":125,"author":{"gitId":"KinTatHo"},"content":" printMessage(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2024-01-28"},{"lineNumber":126,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":127,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":128,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":129,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-28"},{"lineNumber":130,"author":{"gitId":"KinTatHo"},"content":" * Converts a task to a formatted string suitable for file storage.","lastModifiedDate":"2024-01-28"},{"lineNumber":131,"author":{"gitId":"KinTatHo"},"content":" * @param task The task to convert.","lastModifiedDate":"2024-01-28"},{"lineNumber":132,"author":{"gitId":"KinTatHo"},"content":" * @return A string representing the task in the file format.","lastModifiedDate":"2024-01-28"},{"lineNumber":133,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-28"},{"lineNumber":134,"author":{"gitId":"KinTatHo"},"content":" private String taskToFileFormat(Task task) {","lastModifiedDate":"2024-01-28"},{"lineNumber":135,"author":{"gitId":"KinTatHo"},"content":" String status \u003d task.isDone() ? \"1\" : \"0\";","lastModifiedDate":"2024-01-28"},{"lineNumber":136,"author":{"gitId":"KinTatHo"},"content":" String type \u003d task instanceof Todo ? \"T\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":137,"author":{"gitId":"KinTatHo"},"content":" task instanceof Deadline ? \"D\" :","lastModifiedDate":"2024-01-28"},{"lineNumber":138,"author":{"gitId":"KinTatHo"},"content":" task instanceof Event ? \"E\" : \"\";","lastModifiedDate":"2024-01-28"},{"lineNumber":139,"author":{"gitId":"KinTatHo"},"content":" String details \u003d task.getDescription();","lastModifiedDate":"2024-01-28"},{"lineNumber":140,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":141,"author":{"gitId":"KinTatHo"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2024-01-28"},{"lineNumber":142,"author":{"gitId":"KinTatHo"},"content":" Deadline deadlineTask \u003d (Deadline) task;","lastModifiedDate":"2024-01-28"},{"lineNumber":143,"author":{"gitId":"KinTatHo"},"content":" details +\u003d \" | \" + deadlineTask.getByString();","lastModifiedDate":"2024-01-30"},{"lineNumber":144,"author":{"gitId":"KinTatHo"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2024-01-28"},{"lineNumber":145,"author":{"gitId":"KinTatHo"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2024-01-28"},{"lineNumber":146,"author":{"gitId":"KinTatHo"},"content":" details +\u003d \" | \" + eventTask.getFromString() + \" to \" + eventTask.getToString();","lastModifiedDate":"2024-01-30"},{"lineNumber":147,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":148,"author":{"gitId":"KinTatHo"},"content":" return type + \" | \" + status + \" | \" + details;","lastModifiedDate":"2024-01-28"},{"lineNumber":149,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-28"},{"lineNumber":150,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":151,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":152,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":153,"author":{"gitId":"KinTatHo"},"content":" * Prints a line for visual separation in the console output.","lastModifiedDate":"2024-01-27"},{"lineNumber":154,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":155,"author":{"gitId":"KinTatHo"},"content":" private void printLine() {","lastModifiedDate":"2024-01-27"},{"lineNumber":156,"author":{"gitId":"KinTatHo"},"content":" System.out.println(\"________________________________________________________\");","lastModifiedDate":"2024-01-27"},{"lineNumber":157,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":158,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":159,"author":{"gitId":"KinTatHo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":160,"author":{"gitId":"KinTatHo"},"content":" * Prints a greeting message when the chatbot starts.","lastModifiedDate":"2024-01-27"},{"lineNumber":161,"author":{"gitId":"KinTatHo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":162,"author":{"gitId":"KinTatHo"},"content":" public void printGreeting() {","lastModifiedDate":"2024-01-27"},{"lineNumber":163,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":164,"author":{"gitId":"KinTatHo"},"content":" System.out.println(\"Greetings! \" + chatbotName + \", I am\\nAssist you, may I?\");","lastModifiedDate":"2024-01-27"},{"lineNumber":165,"author":{"gitId":"KinTatHo"},"content":" printLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":166,"author":{"gitId":"KinTatHo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":167,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":168,"author":{"gitId":"KinTatHo"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"KinTatHo":168}},{"path":"text-ui-test/data/yoda.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"T | 1 | read book","lastModifiedDate":"2024-01-28"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"D | 0 | return book | Jun 6 2024 1800","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"E | 0 | project meeting | Aug 6 2024 1400 to Aug 6 2024 1600","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"T | 1 | join sports club","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"T | 0 | borrow book","lastModifiedDate":"2024-01-28"}],"authorContributionMap":{"KinTatHo":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"todo read book","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"deadline return book /by 6 June 2024 1800","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"event project meeting /from 6 Aug 2024 1400 /to 6 Aug 2024 1600","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"todo join sports club","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"todo borrow book","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"mark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":"save","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"KinTatHo":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":"KinTatHo"},"content":"java -classpath ..\\bin Yoda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"KinTatHo":1}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"java -classpath ../bin Yoda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"-":37,"KinTatHo":1}}] diff --git a/KinTatHo_ip_master/commits.json b/KinTatHo_ip_master/commits.json index 2974c96b..14d9952e 100644 --- a/KinTatHo_ip_master/commits.json +++ b/KinTatHo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"KinTatHo":[{"date":"2024-01-23","commitResults":[{"hash":"7fc24b997641d6a420c7a4049ecfb01c71f6252a","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":10,"deletions":0}}}]},{"date":"2024-01-24","commitResults":[{"hash":"54c834880847d38b571d35eff3a47a4762468493","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":2},"java":{"insertions":4,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-27","commitResults":[{"hash":"073469be186516961f047405bfa3169523ab20e0","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":470,"deletions":8}}},{"hash":"9a7e2937ecde2687e4ff09a8b8dc52312da925ef","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"d8c93f1aa6f5ce6a71ffda56b94f302d6f313563","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":2}}}]},{"date":"2024-01-28","commitResults":[{"hash":"c3a39dab0d0334541dcbe6df1032460143407d7f","isMergeCommit":false,"messageTitle":"This is Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"md":{"insertions":124,"deletions":22}}},{"hash":"86dc7321d721fc808f0fd65357c265b6d3a6b35a","isMergeCommit":false,"messageTitle":"Added Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2}}},{"hash":"febfebd8a149ea7f9d041d35c6c9ee33ad12e33b","isMergeCommit":false,"messageTitle":"This is level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"330cb45ba064015d22f968e89d03f8f3f09d32a8","isMergeCommit":true,"messageTitle":"merge conflicts","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-01-29","commitResults":[{"hash":"5c7cf9e2809f2f308d3250254dd728a88ab2ae2c","isMergeCommit":false,"messageTitle":"Resolved Deadline merge conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]},{"date":"2024-01-30","commitResults":[{"hash":"f1347b3737588999ccd3295e544bea939237d30a","isMergeCommit":false,"messageTitle":"changed to deadline","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"KinTatHo":{"java":544,"md":117,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":19}},"authorContributionVariance":{"KinTatHo":24365.97},"authorDisplayNameMap":{"KinTatHo":"CS2103T-F10-2 HO K.. TAT"}} +{"authorDailyContributionsMap":{"KinTatHo":[{"date":"2024-01-23","commitResults":[{"hash":"7fc24b997641d6a420c7a4049ecfb01c71f6252a","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":10,"deletions":0}}}]},{"date":"2024-01-24","commitResults":[{"hash":"54c834880847d38b571d35eff3a47a4762468493","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":2},"java":{"insertions":4,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-27","commitResults":[{"hash":"073469be186516961f047405bfa3169523ab20e0","isMergeCommit":false,"messageTitle":"Level 6","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":470,"deletions":8}}},{"hash":"9a7e2937ecde2687e4ff09a8b8dc52312da925ef","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"d8c93f1aa6f5ce6a71ffda56b94f302d6f313563","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":2}}}]},{"date":"2024-01-28","commitResults":[{"hash":"c3a39dab0d0334541dcbe6df1032460143407d7f","isMergeCommit":false,"messageTitle":"This is Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"md":{"insertions":124,"deletions":22}}},{"hash":"86dc7321d721fc808f0fd65357c265b6d3a6b35a","isMergeCommit":false,"messageTitle":"Added Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":2}}},{"hash":"febfebd8a149ea7f9d041d35c6c9ee33ad12e33b","isMergeCommit":false,"messageTitle":"This is level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":0}}},{"hash":"330cb45ba064015d22f968e89d03f8f3f09d32a8","isMergeCommit":true,"messageTitle":"merge conflicts","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-01-29","commitResults":[{"hash":"5c7cf9e2809f2f308d3250254dd728a88ab2ae2c","isMergeCommit":false,"messageTitle":"Resolved Deadline merge conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1}}}]},{"date":"2024-01-30","commitResults":[{"hash":"f1347b3737588999ccd3295e544bea939237d30a","isMergeCommit":false,"messageTitle":"changed to deadline","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a805824199eb58cb214443503ef141e4c686eb86","isMergeCommit":false,"messageTitle":"Created Parser class, DateTimeUtil, and Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":261,"deletions":110}}},{"hash":"2d7cedf4cd32f520d1d703a474d038300cac9a9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027 yes","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"KinTatHo":{"java":695,"md":117,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":18}},"authorContributionVariance":{"KinTatHo":31290.416},"authorDisplayNameMap":{"KinTatHo":"CS2103T-F10-2 HO K.. TAT"}} diff --git a/LWS49_ip_master/authorship.json b/LWS49_ip_master/authorship.json index af8d4d52..36d6eaf8 100644 --- a/LWS49_ip_master/authorship.json +++ b/LWS49_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" protected String by;","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" super(description);","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" return \"[D]\" + super.toString() + \"(by: \" + by + \")\";","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":13}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" protected String from;","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" protected String to;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":" super(description);","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":" return \"[E]\" + super.toString() + \"(from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":15}},{"path":"src/main/java/Luke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"import java.util.*;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":"public class Luke {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" static String[] validCommands \u003d {\"bye\", \"list\", \"unmark\", \"mark\", \"todo\", \"event\", \"deadline\", \"delete\"};","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" private static boolean isCommandValid(String command) {","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" for (String validCommand: validCommands) {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" if (command.equals(validCommand)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" return true;","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":" return false;","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"LWS49"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"LWS49"},"content":" String name \u003d \"Luke\";","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"LWS49"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"LWS49"},"content":" int noTasks \u003d 0;","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\nWhat can I do for you?\");","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"LWS49"},"content":" Scanner scanner \u003d new Scanner (System.in);","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"LWS49"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"LWS49"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":29,"author":{"gitId":"LWS49"},"content":" String[] splited \u003d input.split(\" \");","lastModifiedDate":"2024-01-23"},{"lineNumber":30,"author":{"gitId":"LWS49"},"content":" String command \u003d splited[0];","lastModifiedDate":"2024-01-23"},{"lineNumber":31,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"LWS49"},"content":" if (!isCommandValid(command)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command/task type.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":36,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"LWS49"},"content":" switch (command) {","lastModifiedDate":"2024-01-23"},{"lineNumber":40,"author":{"gitId":"LWS49"},"content":" case \"list\":","lastModifiedDate":"2024-01-23"},{"lineNumber":41,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"LWS49"},"content":" for (int i \u003d 0; i \u003c noTasks; i++) {","lastModifiedDate":"2024-01-23"},{"lineNumber":43,"author":{"gitId":"LWS49"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i).toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":44,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"LWS49"},"content":" case \"mark\":","lastModifiedDate":"2024-01-23"},{"lineNumber":47,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"LWS49"},"content":" int markIndex \u003d Integer.valueOf(splited[1]);","lastModifiedDate":"2024-01-23"},{"lineNumber":49,"author":{"gitId":"LWS49"},"content":" if (markIndex \u003c\u003d 0 || markIndex \u003e noTasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":50,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Task does not exist. Please give a valid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":52,"author":{"gitId":"LWS49"},"content":" Task markTask \u003d taskList.get(markIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":53,"author":{"gitId":"LWS49"},"content":" markTask.setToDone();","lastModifiedDate":"2024-01-23"},{"lineNumber":54,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":55,"author":{"gitId":"LWS49"},"content":" System.out.println(markTask.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":56,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":57,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":58,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":59,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":60,"author":{"gitId":"LWS49"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-23"},{"lineNumber":61,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":62,"author":{"gitId":"LWS49"},"content":" int unmarkIndex \u003d Integer.valueOf(splited[1]);","lastModifiedDate":"2024-01-23"},{"lineNumber":63,"author":{"gitId":"LWS49"},"content":" if (unmarkIndex \u003c\u003d 0 || unmarkIndex \u003e noTasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":64,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Task does not exist. Please give a valid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":65,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":66,"author":{"gitId":"LWS49"},"content":" Task unmarkTask \u003d taskList.get(unmarkIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":67,"author":{"gitId":"LWS49"},"content":" unmarkTask.setToNotDone();","lastModifiedDate":"2024-01-23"},{"lineNumber":68,"author":{"gitId":"LWS49"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":69,"author":{"gitId":"LWS49"},"content":" System.out.println(unmarkTask.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":70,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":71,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":72,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":73,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":74,"author":{"gitId":"LWS49"},"content":" case \"todo\":","lastModifiedDate":"2024-01-23"},{"lineNumber":75,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":76,"author":{"gitId":"LWS49"},"content":" if (input.substring(4).trim().isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":77,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The description cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":78,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":79,"author":{"gitId":"LWS49"},"content":" Todo todo \u003d new Todo(input.substring(5));","lastModifiedDate":"2024-01-23"},{"lineNumber":80,"author":{"gitId":"LWS49"},"content":" taskList.add(todo);","lastModifiedDate":"2024-01-24"},{"lineNumber":81,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":82,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":83,"author":{"gitId":"LWS49"},"content":" System.out.println(todo.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":84,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-23"},{"lineNumber":85,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":86,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":87,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":88,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":89,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":90,"author":{"gitId":"LWS49"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-23"},{"lineNumber":91,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":92,"author":{"gitId":"LWS49"},"content":" String[] deadlineSplit \u003d input.split(\"/\");","lastModifiedDate":"2024-01-23"},{"lineNumber":93,"author":{"gitId":"LWS49"},"content":" if (deadlineSplit.length \u003c 2","lastModifiedDate":"2024-01-24"},{"lineNumber":94,"author":{"gitId":"LWS49"},"content":" || !deadlineSplit[1].substring(0,2).equals(\"by\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":95,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. Please follow the format for deadline tasks.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":96,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":97,"author":{"gitId":"LWS49"},"content":" if (deadlineSplit[0].substring(9).trim().isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":98,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The description cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":99,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":100,"author":{"gitId":"LWS49"},"content":" if (deadlineSplit[1].trim().length() \u003c\u003d 2) {","lastModifiedDate":"2024-01-24"},{"lineNumber":101,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The deadline cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":102,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":103,"author":{"gitId":"LWS49"},"content":" String deadlineDescription \u003d deadlineSplit[0].substring(9);","lastModifiedDate":"2024-01-23"},{"lineNumber":104,"author":{"gitId":"LWS49"},"content":" String by \u003d deadlineSplit[1].substring(3);","lastModifiedDate":"2024-01-23"},{"lineNumber":105,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":106,"author":{"gitId":"LWS49"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, by);","lastModifiedDate":"2024-01-23"},{"lineNumber":107,"author":{"gitId":"LWS49"},"content":" taskList.add(deadline);","lastModifiedDate":"2024-01-24"},{"lineNumber":108,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":109,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":110,"author":{"gitId":"LWS49"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":111,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-23"},{"lineNumber":112,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":113,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":114,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":115,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":116,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":117,"author":{"gitId":"LWS49"},"content":" case \"event\":","lastModifiedDate":"2024-01-23"},{"lineNumber":118,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":119,"author":{"gitId":"LWS49"},"content":" String[] eventSplit \u003d input.split(\"/\");","lastModifiedDate":"2024-01-23"},{"lineNumber":120,"author":{"gitId":"LWS49"},"content":" if (eventSplit.length \u003c 3","lastModifiedDate":"2024-01-24"},{"lineNumber":121,"author":{"gitId":"LWS49"},"content":" || !eventSplit[1].substring(0,4).equals(\"from\")","lastModifiedDate":"2024-01-24"},{"lineNumber":122,"author":{"gitId":"LWS49"},"content":" || !eventSplit[2].substring(0,2).equals(\"to\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":123,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. Please follow the format for event tasks.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":124,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":125,"author":{"gitId":"LWS49"},"content":" if (eventSplit[0].substring(6).trim().isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":126,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The description cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":127,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":128,"author":{"gitId":"LWS49"},"content":" if (eventSplit[1].trim().length() \u003c\u003d 4 ) {","lastModifiedDate":"2024-01-24"},{"lineNumber":129,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The from section cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":130,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":131,"author":{"gitId":"LWS49"},"content":" if (eventSplit[2].trim().length() \u003c\u003d 2 ) {","lastModifiedDate":"2024-01-24"},{"lineNumber":132,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The to section cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":133,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":134,"author":{"gitId":"LWS49"},"content":" String eventDescription \u003d eventSplit[0].substring(6);","lastModifiedDate":"2024-01-23"},{"lineNumber":135,"author":{"gitId":"LWS49"},"content":" String from \u003d eventSplit[1].substring(5);","lastModifiedDate":"2024-01-23"},{"lineNumber":136,"author":{"gitId":"LWS49"},"content":" String to \u003d eventSplit[2].substring(3);","lastModifiedDate":"2024-01-23"},{"lineNumber":137,"author":{"gitId":"LWS49"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2024-01-23"},{"lineNumber":138,"author":{"gitId":"LWS49"},"content":" taskList.add(event);","lastModifiedDate":"2024-01-24"},{"lineNumber":139,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":140,"author":{"gitId":"LWS49"},"content":" System.out.println(event.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":141,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-23"},{"lineNumber":142,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":143,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":144,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":145,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":146,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":147,"author":{"gitId":"LWS49"},"content":" case \"delete\":","lastModifiedDate":"2024-01-24"},{"lineNumber":148,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":149,"author":{"gitId":"LWS49"},"content":" int deleteIndex \u003d Integer.valueOf(splited[1]);","lastModifiedDate":"2024-01-24"},{"lineNumber":150,"author":{"gitId":"LWS49"},"content":" if (deleteIndex \u003c\u003d 0 || deleteIndex \u003e noTasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":151,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Task does not exist. Please give a valid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":152,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":153,"author":{"gitId":"LWS49"},"content":" Task deleteTask \u003d taskList.get(deleteIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":154,"author":{"gitId":"LWS49"},"content":" taskList.remove(deleteIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":155,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":156,"author":{"gitId":"LWS49"},"content":" System.out.println(deleteTask.toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":157,"author":{"gitId":"LWS49"},"content":" noTasks--;","lastModifiedDate":"2024-01-24"},{"lineNumber":158,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":159,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":160,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":161,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":162,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":163,"author":{"gitId":"LWS49"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-23"},{"lineNumber":164,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":165,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-23"},{"lineNumber":166,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":167,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":168,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":168}},{"path":"src/main/java/LukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class LukeException extends Exception {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" public LukeException(String message) {","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" super(message);","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"LWS49":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" protected boolean done;","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" protected String name;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" public Task (String name) {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":" this.done \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" if (done) {","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":" return \"[X] \" + name;","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":" } else {","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":" return \"[ ] \" + name;","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"LWS49"},"content":" public void setToDone() {","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"LWS49"},"content":" this.done \u003d true;","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"LWS49"},"content":" public void setToNotDone() {","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"LWS49"},"content":" this.done \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":26}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":" super(description);","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":11}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"todo borrow book","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"list","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":"mark 1","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":"mark 2","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":"unmark 1","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":"list","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":"mark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"delete 4","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":"delete 3","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":"hehe","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":"todo","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":"deadline read book by 3","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":"deadline read book /start 3","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"LWS49"},"content":"deadline /by 3","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"LWS49"},"content":"deadline read book /by","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"LWS49"},"content":"event project meeting /from Mon 2pm to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"LWS49"},"content":"event project meeting /fro Mon 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"LWS49"},"content":"event project meeting /fro Mon 2pm /until 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"LWS49"},"content":"event /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"LWS49"},"content":"event project meeting /from /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"LWS49"},"content":"event project meeting /from Mon 2pm /to","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"LWS49"},"content":"bye","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":24}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"javac -cp C:\\Users\\user\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\user\\ip\\bin C:\\Users\\user\\ip\\src\\main\\java\\*.java","lastModifiedDate":"2024-01-23"},{"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":"LWS49"},"content":"java -classpath C:\\Users\\user\\ip\\bin Luke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"LWS49":2,"-":19}}] +[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" protected String by;","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" super(description);","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" return \"[D]\" + super.toString() + \"(by: \" + by + \")\";","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":13}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" protected String from;","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" protected String to;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":" super(description);","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":" return \"[E]\" + super.toString() + \"(from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":15}},{"path":"src/main/java/Luke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"import java.io.File;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":"import java.util.*;","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":"public class Luke {","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" static String[] validCommands \u003d {\"bye\", \"list\", \"unmark\", \"mark\", \"todo\", \"event\", \"deadline\", \"delete\"};","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" static String directoryPath \u003d \"./data\";","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":" static String fileName \u003d \"list.txt\";","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":" static File file \u003d new File (directoryPath, fileName);","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"LWS49"},"content":" static boolean fileIsEmpty \u003d true;","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"LWS49"},"content":" private static boolean isCommandValid(String command) {","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"LWS49"},"content":" for (String validCommand: validCommands) {","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"LWS49"},"content":" if (command.equals(validCommand)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"LWS49"},"content":" return true;","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"LWS49"},"content":" return false;","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"LWS49"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-23"},{"lineNumber":29,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":30,"author":{"gitId":"LWS49"},"content":" String name \u003d \"Luke\";","lastModifiedDate":"2024-01-23"},{"lineNumber":31,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":32,"author":{"gitId":"LWS49"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":34,"author":{"gitId":"LWS49"},"content":" ArrayList\u003cString\u003e saveTaskList \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"LWS49"},"content":" int noTasks \u003d 0;","lastModifiedDate":"2024-01-23"},{"lineNumber":37,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":38,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"LWS49"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"LWS49"},"content":" if (!directory.exists()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"LWS49"},"content":" directory.mkdirs();","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"LWS49"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"LWS49"},"content":" file.createNewFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"LWS49"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Failed to save file: \" + e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"LWS49"},"content":" Scanner myReader \u003d new Scanner(file);","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"LWS49"},"content":" while (myReader.hasNextLine()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"LWS49"},"content":" String data \u003d myReader.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"LWS49"},"content":" if (data !\u003d \"\") {","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"LWS49"},"content":" saveTaskList.add(data);","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"LWS49"},"content":" myReader.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"LWS49"},"content":" fileIsEmpty \u003d saveTaskList.isEmpty();","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"LWS49"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"LWS49"},"content":" System.out.println(\"File not found.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"LWS49"},"content":" saveTaskList.forEach(taskString -\u003e {","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"LWS49"},"content":" String taskType \u003d taskString.substring(1, 2);","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"LWS49"},"content":" switch (taskType) {","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"LWS49"},"content":" case \"T\":","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"LWS49"},"content":" Todo todo \u003d new Todo(taskString.substring(7).trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"LWS49"},"content":" taskList.add(todo);","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"LWS49"},"content":" case \"D\":","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"LWS49"},"content":" String[] deadlineSplit \u003d taskString.split(\"by: \");","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"LWS49"},"content":" String deadlineDescription \u003d deadlineSplit[0].substring(7, deadlineSplit[0].length() - 1);","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"LWS49"},"content":" String by \u003d deadlineSplit[1].substring(0, deadlineSplit[1].length() - 1).trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"LWS49"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, by);","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"LWS49"},"content":" taskList.add(deadline);","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"LWS49"},"content":" case \"E\":","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"LWS49"},"content":" String[] eventFirstSplit \u003d taskString.split(\"from: \");","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"LWS49"},"content":" String[] eventSecondSplit \u003d eventFirstSplit[1].split(\" to: \");","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"LWS49"},"content":" String eventDescription \u003d eventFirstSplit[0].substring(7, eventFirstSplit[0].length() - 1);","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"LWS49"},"content":" String from \u003d eventSecondSplit[0].trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"LWS49"},"content":" String to \u003d eventSecondSplit[1].substring(0, eventSecondSplit[1].length() - 1).trim();","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"LWS49"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"LWS49"},"content":" taskList.add(event);","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"LWS49"},"content":" });","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\nWhat can I do for you?\");","lastModifiedDate":"2024-01-23"},{"lineNumber":93,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":94,"author":{"gitId":"LWS49"},"content":" Scanner scanner \u003d new Scanner (System.in);","lastModifiedDate":"2024-01-23"},{"lineNumber":95,"author":{"gitId":"LWS49"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-23"},{"lineNumber":96,"author":{"gitId":"LWS49"},"content":" while (!input.equals(\"bye\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":97,"author":{"gitId":"LWS49"},"content":" String[] splited \u003d input.split(\" \");","lastModifiedDate":"2024-01-23"},{"lineNumber":98,"author":{"gitId":"LWS49"},"content":" String command \u003d splited[0];","lastModifiedDate":"2024-01-23"},{"lineNumber":99,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":100,"author":{"gitId":"LWS49"},"content":" if (!isCommandValid(command)) {","lastModifiedDate":"2024-01-24"},{"lineNumber":101,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command/task type.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":102,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":103,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":104,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":105,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":106,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":107,"author":{"gitId":"LWS49"},"content":" switch (command) {","lastModifiedDate":"2024-01-23"},{"lineNumber":108,"author":{"gitId":"LWS49"},"content":" case \"list\":","lastModifiedDate":"2024-01-23"},{"lineNumber":109,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":110,"author":{"gitId":"LWS49"},"content":" for (int i \u003d 0; i \u003c noTasks; i++) {","lastModifiedDate":"2024-01-23"},{"lineNumber":111,"author":{"gitId":"LWS49"},"content":" System.out.println((i + 1) + \". \" + taskList.get(i).toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":112,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":113,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":114,"author":{"gitId":"LWS49"},"content":" case \"mark\":","lastModifiedDate":"2024-01-23"},{"lineNumber":115,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":116,"author":{"gitId":"LWS49"},"content":" int markIndex \u003d Integer.valueOf(splited[1]);","lastModifiedDate":"2024-01-23"},{"lineNumber":117,"author":{"gitId":"LWS49"},"content":" if (markIndex \u003c\u003d 0 || markIndex \u003e noTasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":118,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Task does not exist. Please give a valid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":119,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":120,"author":{"gitId":"LWS49"},"content":" Task markTask \u003d taskList.get(markIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":121,"author":{"gitId":"LWS49"},"content":" markTask.setToDone();","lastModifiedDate":"2024-01-23"},{"lineNumber":122,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":123,"author":{"gitId":"LWS49"},"content":" System.out.println(markTask.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":124,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":125,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":126,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":127,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":128,"author":{"gitId":"LWS49"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-23"},{"lineNumber":129,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":130,"author":{"gitId":"LWS49"},"content":" int unmarkIndex \u003d Integer.valueOf(splited[1]);","lastModifiedDate":"2024-01-23"},{"lineNumber":131,"author":{"gitId":"LWS49"},"content":" if (unmarkIndex \u003c\u003d 0 || unmarkIndex \u003e noTasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":132,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Task does not exist. Please give a valid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":133,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":134,"author":{"gitId":"LWS49"},"content":" Task unmarkTask \u003d taskList.get(unmarkIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":135,"author":{"gitId":"LWS49"},"content":" unmarkTask.setToNotDone();","lastModifiedDate":"2024-01-23"},{"lineNumber":136,"author":{"gitId":"LWS49"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":137,"author":{"gitId":"LWS49"},"content":" System.out.println(unmarkTask.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":138,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":139,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":140,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":141,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":142,"author":{"gitId":"LWS49"},"content":" case \"todo\":","lastModifiedDate":"2024-01-23"},{"lineNumber":143,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":144,"author":{"gitId":"LWS49"},"content":" if (input.substring(4).trim().isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":145,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The description cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":146,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":147,"author":{"gitId":"LWS49"},"content":" Todo todo \u003d new Todo(input.substring(5));","lastModifiedDate":"2024-01-23"},{"lineNumber":148,"author":{"gitId":"LWS49"},"content":" taskList.add(todo);","lastModifiedDate":"2024-01-24"},{"lineNumber":149,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":150,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":151,"author":{"gitId":"LWS49"},"content":" System.out.println(todo.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":152,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-23"},{"lineNumber":153,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":154,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":155,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":156,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":157,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":158,"author":{"gitId":"LWS49"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-23"},{"lineNumber":159,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":160,"author":{"gitId":"LWS49"},"content":" String[] deadlineSplit \u003d input.split(\"/\");","lastModifiedDate":"2024-01-23"},{"lineNumber":161,"author":{"gitId":"LWS49"},"content":" if (deadlineSplit.length \u003c 2","lastModifiedDate":"2024-01-24"},{"lineNumber":162,"author":{"gitId":"LWS49"},"content":" || !deadlineSplit[1].substring(0,2).equals(\"by\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":163,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. Please follow the format for deadline tasks.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":164,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":165,"author":{"gitId":"LWS49"},"content":" if (deadlineSplit[0].substring(9).trim().isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":166,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The description cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":167,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":168,"author":{"gitId":"LWS49"},"content":" if (deadlineSplit[1].trim().length() \u003c\u003d 2) {","lastModifiedDate":"2024-01-24"},{"lineNumber":169,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The deadline cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":170,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":171,"author":{"gitId":"LWS49"},"content":" String deadlineDescription \u003d deadlineSplit[0].substring(9);","lastModifiedDate":"2024-01-23"},{"lineNumber":172,"author":{"gitId":"LWS49"},"content":" String by \u003d deadlineSplit[1].substring(3);","lastModifiedDate":"2024-01-23"},{"lineNumber":173,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":174,"author":{"gitId":"LWS49"},"content":" Deadline deadline \u003d new Deadline(deadlineDescription, by);","lastModifiedDate":"2024-01-23"},{"lineNumber":175,"author":{"gitId":"LWS49"},"content":" taskList.add(deadline);","lastModifiedDate":"2024-01-24"},{"lineNumber":176,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":177,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":178,"author":{"gitId":"LWS49"},"content":" System.out.println(deadline.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":179,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-23"},{"lineNumber":180,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":181,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":182,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":183,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":184,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":185,"author":{"gitId":"LWS49"},"content":" case \"event\":","lastModifiedDate":"2024-01-23"},{"lineNumber":186,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":187,"author":{"gitId":"LWS49"},"content":" String[] eventSplit \u003d input.split(\"/\");","lastModifiedDate":"2024-01-23"},{"lineNumber":188,"author":{"gitId":"LWS49"},"content":" if (eventSplit.length \u003c 3","lastModifiedDate":"2024-01-24"},{"lineNumber":189,"author":{"gitId":"LWS49"},"content":" || !eventSplit[1].substring(0,4).equals(\"from\")","lastModifiedDate":"2024-01-24"},{"lineNumber":190,"author":{"gitId":"LWS49"},"content":" || !eventSplit[2].substring(0,2).equals(\"to\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":191,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. Please follow the format for event tasks.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":192,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":193,"author":{"gitId":"LWS49"},"content":" if (eventSplit[0].substring(6).trim().isEmpty()) {","lastModifiedDate":"2024-01-24"},{"lineNumber":194,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The description cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":195,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":196,"author":{"gitId":"LWS49"},"content":" if (eventSplit[1].trim().length() \u003c\u003d 4 ) {","lastModifiedDate":"2024-01-24"},{"lineNumber":197,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The from section cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":198,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":199,"author":{"gitId":"LWS49"},"content":" if (eventSplit[2].trim().length() \u003c\u003d 2 ) {","lastModifiedDate":"2024-01-24"},{"lineNumber":200,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Invalid command. The to section cannot be empty.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":201,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":202,"author":{"gitId":"LWS49"},"content":" String eventDescription \u003d eventSplit[0].substring(6);","lastModifiedDate":"2024-01-23"},{"lineNumber":203,"author":{"gitId":"LWS49"},"content":" String from \u003d eventSplit[1].substring(5);","lastModifiedDate":"2024-01-23"},{"lineNumber":204,"author":{"gitId":"LWS49"},"content":" String to \u003d eventSplit[2].substring(3);","lastModifiedDate":"2024-01-23"},{"lineNumber":205,"author":{"gitId":"LWS49"},"content":" Event event \u003d new Event(eventDescription, from, to);","lastModifiedDate":"2024-01-23"},{"lineNumber":206,"author":{"gitId":"LWS49"},"content":" taskList.add(event);","lastModifiedDate":"2024-01-24"},{"lineNumber":207,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":208,"author":{"gitId":"LWS49"},"content":" System.out.println(event.toString());","lastModifiedDate":"2024-01-23"},{"lineNumber":209,"author":{"gitId":"LWS49"},"content":" noTasks++;","lastModifiedDate":"2024-01-23"},{"lineNumber":210,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":211,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":212,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":213,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":214,"author":{"gitId":"LWS49"},"content":" break;","lastModifiedDate":"2024-01-23"},{"lineNumber":215,"author":{"gitId":"LWS49"},"content":" case \"delete\":","lastModifiedDate":"2024-01-24"},{"lineNumber":216,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":217,"author":{"gitId":"LWS49"},"content":" int deleteIndex \u003d Integer.valueOf(splited[1]);","lastModifiedDate":"2024-01-24"},{"lineNumber":218,"author":{"gitId":"LWS49"},"content":" if (deleteIndex \u003c\u003d 0 || deleteIndex \u003e noTasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":219,"author":{"gitId":"LWS49"},"content":" throw new LukeException(\"Task does not exist. Please give a valid task number.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":220,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":221,"author":{"gitId":"LWS49"},"content":" Task deleteTask \u003d taskList.get(deleteIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":222,"author":{"gitId":"LWS49"},"content":" taskList.remove(deleteIndex - 1);","lastModifiedDate":"2024-01-24"},{"lineNumber":223,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-24"},{"lineNumber":224,"author":{"gitId":"LWS49"},"content":" System.out.println(deleteTask.toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":225,"author":{"gitId":"LWS49"},"content":" noTasks--;","lastModifiedDate":"2024-01-24"},{"lineNumber":226,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Now you have \" + noTasks + \" tasks in the list.\");","lastModifiedDate":"2024-01-24"},{"lineNumber":227,"author":{"gitId":"LWS49"},"content":" } catch (LukeException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":228,"author":{"gitId":"LWS49"},"content":" System.out.println(e);","lastModifiedDate":"2024-01-24"},{"lineNumber":229,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":230,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":231,"author":{"gitId":"LWS49"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-23"},{"lineNumber":232,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":233,"author":{"gitId":"LWS49"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":234,"author":{"gitId":"LWS49"},"content":" FileWriter writer \u003d new FileWriter(directoryPath + \"/\" + fileName);","lastModifiedDate":"2024-01-30"},{"lineNumber":235,"author":{"gitId":"LWS49"},"content":" for (Task task : taskList) {","lastModifiedDate":"2024-01-30"},{"lineNumber":236,"author":{"gitId":"LWS49"},"content":" writer.write(task.toString());","lastModifiedDate":"2024-01-30"},{"lineNumber":237,"author":{"gitId":"LWS49"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":238,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":239,"author":{"gitId":"LWS49"},"content":" writer.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":240,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Successfully saved file to local.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":241,"author":{"gitId":"LWS49"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":242,"author":{"gitId":"LWS49"},"content":" System.out.println(\"An error occurred while saving.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":243,"author":{"gitId":"LWS49"},"content":" e.printStackTrace();","lastModifiedDate":"2024-01-30"},{"lineNumber":244,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":245,"author":{"gitId":"LWS49"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-23"},{"lineNumber":246,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":247,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":248,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":248}},{"path":"src/main/java/LukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class LukeException extends Exception {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" public LukeException(String message) {","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" super(message);","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"LWS49":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":" protected boolean done;","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" protected String name;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" public Task (String name) {","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":" this.done \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":" if (done) {","lastModifiedDate":"2024-01-23"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":" return \"[X] \" + name;","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":" } else {","lastModifiedDate":"2024-01-23"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":" return \"[ ] \" + name;","lastModifiedDate":"2024-01-23"},{"lineNumber":16,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":18,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"LWS49"},"content":" public void setToDone() {","lastModifiedDate":"2024-01-23"},{"lineNumber":20,"author":{"gitId":"LWS49"},"content":" this.done \u003d true;","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":22,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":23,"author":{"gitId":"LWS49"},"content":" public void setToNotDone() {","lastModifiedDate":"2024-01-23"},{"lineNumber":24,"author":{"gitId":"LWS49"},"content":" this.done \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":25,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":26}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":" public Todo(String description) {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":" super(description);","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":" @Override","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":" public String toString() {","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-23"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":11}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LWS49"},"content":"todo borrow book","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"LWS49"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"LWS49"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"LWS49"},"content":"list","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"LWS49"},"content":"mark 1","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"LWS49"},"content":"mark 2","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"LWS49"},"content":"unmark 1","lastModifiedDate":"2024-01-23"},{"lineNumber":8,"author":{"gitId":"LWS49"},"content":"list","lastModifiedDate":"2024-01-23"},{"lineNumber":9,"author":{"gitId":"LWS49"},"content":"mark 4","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"delete 4","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"LWS49"},"content":"delete 3","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"LWS49"},"content":"hehe","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"LWS49"},"content":"todo","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"LWS49"},"content":"deadline read book by 3","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"LWS49"},"content":"deadline read book /start 3","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"LWS49"},"content":"deadline /by 3","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"LWS49"},"content":"deadline read book /by","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"LWS49"},"content":"event project meeting /from Mon 2pm to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"LWS49"},"content":"event project meeting /fro Mon 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"LWS49"},"content":"event project meeting /fro Mon 2pm /until 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"LWS49"},"content":"event /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"LWS49"},"content":"event project meeting /from /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"LWS49"},"content":"event project meeting /from Mon 2pm /to","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"LWS49"},"content":"bye","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"LWS49":24}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"LWS49"},"content":"javac -cp C:\\Users\\user\\ip\\src\\main\\java -Xlint:none -d C:\\Users\\user\\ip\\bin C:\\Users\\user\\ip\\src\\main\\java\\*.java","lastModifiedDate":"2024-01-23"},{"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":"LWS49"},"content":"java -classpath C:\\Users\\user\\ip\\bin Luke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"LWS49":2,"-":19}}] diff --git a/LWS49_ip_master/commits.json b/LWS49_ip_master/commits.json index 6b6d3b65..61dcf873 100644 --- a/LWS49_ip_master/commits.json +++ b/LWS49_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LWS49":[{"date":"2024-01-23","commitResults":[{"hash":"5512c56af8f5e75eccc7e743711fc821bcb3eb26","isMergeCommit":false,"messageTitle":"complete Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"66575c73cce21dbfbf7fa4717440630105c05908","isMergeCommit":false,"messageTitle":"complete Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"02cb0ce40b149be09c5a5fe10c619d0be5bcc8ec","isMergeCommit":false,"messageTitle":"complete Level-1","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":21}}},{"hash":"d13d92b813bc74f2c83f110b8300104aa20a2c69","isMergeCommit":false,"messageTitle":"added Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"52641d91ba1bc91dcecc593c4608e31a767ad17f","isMergeCommit":false,"messageTitle":"added Level-4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":27}}},{"hash":"63c2b2d7debaa2e61ba3938fcf1cff09dd840219","isMergeCommit":false,"messageTitle":"update javac and java","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2}}},{"hash":"466212755e5d8d94d82dd84571dc7b6e4e563086","isMergeCommit":false,"messageTitle":"remove default case without command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"c1d3c2fe1ab2cdcfd65b972e44e1b4312acbf5f3","isMergeCommit":false,"messageTitle":"added Level-5","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":0},"java":{"insertions":0,"deletions":8},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-24","commitResults":[{"hash":"b0a707265b356ba38e275e8a47c8c47c0cd5e8a0","isMergeCommit":false,"messageTitle":"added Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":8},"java":{"insertions":113,"deletions":37}}},{"hash":"8a3187a196d7c627141a42398b70b9a2db344bd7","isMergeCommit":false,"messageTitle":"added Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":25,"deletions":11}}}]},{"date":"2024-01-25","commitResults":[{"hash":"ae7c00d7147a971c91fa8c16289bce88154e28b8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into push-Level-4","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3b5493680b4c73fbc2a2e13a24887dc9702db8a7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from LWS49/push-Level-4","messageBody":"Push level 4","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LWS49":{"java":238,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":24}},"authorContributionVariance":{"LWS49":14337.265},"authorDisplayNameMap":{"LWS49":"CS2103T-W11-1 LOW ..HENG"}} +{"authorDailyContributionsMap":{"LWS49":[{"date":"2024-01-23","commitResults":[{"hash":"5512c56af8f5e75eccc7e743711fc821bcb3eb26","isMergeCommit":false,"messageTitle":"complete Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"66575c73cce21dbfbf7fa4717440630105c05908","isMergeCommit":false,"messageTitle":"complete Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"02cb0ce40b149be09c5a5fe10c619d0be5bcc8ec","isMergeCommit":false,"messageTitle":"complete Level-1","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":21}}},{"hash":"d13d92b813bc74f2c83f110b8300104aa20a2c69","isMergeCommit":false,"messageTitle":"added Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"52641d91ba1bc91dcecc593c4608e31a767ad17f","isMergeCommit":false,"messageTitle":"added Level-4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":27}}},{"hash":"63c2b2d7debaa2e61ba3938fcf1cff09dd840219","isMergeCommit":false,"messageTitle":"update javac and java","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2}}},{"hash":"466212755e5d8d94d82dd84571dc7b6e4e563086","isMergeCommit":false,"messageTitle":"remove default case without command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"c1d3c2fe1ab2cdcfd65b972e44e1b4312acbf5f3","isMergeCommit":false,"messageTitle":"added Level-5","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":17,"deletions":0},"java":{"insertions":0,"deletions":8},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2024-01-24","commitResults":[{"hash":"b0a707265b356ba38e275e8a47c8c47c0cd5e8a0","isMergeCommit":false,"messageTitle":"added Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":8},"java":{"insertions":113,"deletions":37}}},{"hash":"8a3187a196d7c627141a42398b70b9a2db344bd7","isMergeCommit":false,"messageTitle":"added Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":25,"deletions":11}}}]},{"date":"2024-01-25","commitResults":[{"hash":"ae7c00d7147a971c91fa8c16289bce88154e28b8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into push-Level-4","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3b5493680b4c73fbc2a2e13a24887dc9702db8a7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from LWS49/push-Level-4","messageBody":"Push level 4","fileTypesAndContributionMap":{}}]},{"date":"2024-01-30","commitResults":[{"hash":"6413cfaa9668fd180b2ff62a53be3d4d8475c12e","isMergeCommit":false,"messageTitle":"added Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"LWS49":{"java":318,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":24}},"authorContributionVariance":{"LWS49":9603.6875},"authorDisplayNameMap":{"LWS49":"CS2103T-W11-1 LOW ..HENG"}} diff --git a/Ragnapop_ip_master/authorship.json b/Ragnapop_ip_master/authorship.json index de90395f..179e8dad 100644 --- a/Ragnapop_ip_master/authorship.json +++ b/Ragnapop_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" protected String by;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" super(description);","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" public String getTaskIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" return \"D\";","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" public String ToString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" return super.ToString() + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ragnapop":19}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":"import static java.lang.System.exit;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" public static void intro(String name, String logo) {","lastModifiedDate":"2024-01-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Hello! I\u0027m \\n\" + name);","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"What can I do for you?\\n\");// initial introductory message","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":" public static void bye() {","lastModifiedDate":"2024-01-23"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":" System.exit(1);// if keyword is bye, exit the program","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":" public static int addtask(int n, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2024-01-23"},{"lineNumber":26,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":27,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(n).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":28,"author":{"gitId":"Ragnapop"},"content":" n++;","lastModifiedDate":"2024-01-23"},{"lineNumber":29,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":30,"author":{"gitId":"Ragnapop"},"content":" return n;","lastModifiedDate":"2024-01-23"},{"lineNumber":31,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":33,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e eventcase(String str, int n, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":34,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"event\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":35,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"from\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":36,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"to\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"Ragnapop"},"content":" String[] eventtokens \u003d str.split(\"/\");","lastModifiedDate":"2024-01-22"},{"lineNumber":38,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":39,"author":{"gitId":"Ragnapop"},"content":" if(eventtokens.length \u003c 1) {","lastModifiedDate":"2024-01-23"},{"lineNumber":40,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The description of a event cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":41,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: event [description] / [event starting date] / [event ending date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":43,"author":{"gitId":"Ragnapop"},"content":" else if(eventtokens.length \u003c 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":44,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The beginning date of a event cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: event [description] / [event starting date] / [event ending date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":47,"author":{"gitId":"Ragnapop"},"content":" else if(eventtokens.length \u003c 3) {","lastModifiedDate":"2024-01-23"},{"lineNumber":48,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The ending date of a event cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":49,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: event [description] / [event starting date] / [event ending date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":50,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":51,"author":{"gitId":"Ragnapop"},"content":" String subject \u003d eventtokens[0];","lastModifiedDate":"2024-01-22"},{"lineNumber":52,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":53,"author":{"gitId":"Ragnapop"},"content":" String to \u003d eventtokens[1];","lastModifiedDate":"2024-01-22"},{"lineNumber":54,"author":{"gitId":"Ragnapop"},"content":" String from \u003d eventtokens[2];","lastModifiedDate":"2024-01-22"},{"lineNumber":55,"author":{"gitId":"Ragnapop"},"content":" list.add(new Event(subject, to, from));","lastModifiedDate":"2024-01-23"},{"lineNumber":56,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":57,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":58,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":59,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":60,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":61,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e deadlinecase(String str, int n, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":62,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"deadline\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":63,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"by\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":64,"author":{"gitId":"Ragnapop"},"content":" String[] deadlinetokens \u003d str.split(\"/\");","lastModifiedDate":"2024-01-22"},{"lineNumber":65,"author":{"gitId":"Ragnapop"},"content":" if(deadlinetokens.length \u003c 1) {","lastModifiedDate":"2024-01-23"},{"lineNumber":66,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":67,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: deadline [description] / [deadline date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":68,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":69,"author":{"gitId":"Ragnapop"},"content":" else if(deadlinetokens.length \u003c 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":70,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! You must provide a deadline for this task.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":71,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: deadline [description] / [deadline date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":72,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":73,"author":{"gitId":"Ragnapop"},"content":" String subject \u003d deadlinetokens[0];","lastModifiedDate":"2024-01-22"},{"lineNumber":74,"author":{"gitId":"Ragnapop"},"content":" String deadline \u003d deadlinetokens[1];","lastModifiedDate":"2024-01-22"},{"lineNumber":75,"author":{"gitId":"Ragnapop"},"content":" list.add(new Deadline(subject, deadline));","lastModifiedDate":"2024-01-23"},{"lineNumber":76,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":77,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":78,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":79,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e todocase(String str, int n, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":80,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"todo\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":81,"author":{"gitId":"Ragnapop"},"content":" int strcount \u003d str.split(\"\\\\s\").length;","lastModifiedDate":"2024-01-23"},{"lineNumber":82,"author":{"gitId":"Ragnapop"},"content":" ","lastModifiedDate":"2024-01-24"},{"lineNumber":83,"author":{"gitId":"Ragnapop"},"content":" if(strcount \u003d\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":84,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty. \" +","lastModifiedDate":"2024-01-23"},{"lineNumber":85,"author":{"gitId":"Ragnapop"},"content":" \" Please give this instruction in the following format: todo [description]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":86,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":87,"author":{"gitId":"Ragnapop"},"content":" list.add(new Task(str));","lastModifiedDate":"2024-01-23"},{"lineNumber":88,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":89,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":90,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":91,"author":{"gitId":"Ragnapop"},"content":" public static void markcase(String[] tokens, ArrayList\u003cTask\u003e list) throws DukeException{","lastModifiedDate":"2024-01-23"},{"lineNumber":92,"author":{"gitId":"Ragnapop"},"content":" if(tokens.length !\u003d 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":93,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"please give this instruction in the following format: mark [task number]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":94,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":95,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1]) - 1;","lastModifiedDate":"2024-01-23"},{"lineNumber":96,"author":{"gitId":"Ragnapop"},"content":" list.get(no).isDone \u003d true;","lastModifiedDate":"2024-01-23"},{"lineNumber":97,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":98,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(no).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":99,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":100,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":101,"author":{"gitId":"Ragnapop"},"content":" public static void unmarkcase(String[] tokens, ArrayList\u003cTask\u003e list) throws DukeException{","lastModifiedDate":"2024-01-23"},{"lineNumber":102,"author":{"gitId":"Ragnapop"},"content":" if(tokens.length !\u003d 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":103,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"please give this instruction in the following format: unmark [task number]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":104,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":105,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1]) - 1;","lastModifiedDate":"2024-01-23"},{"lineNumber":106,"author":{"gitId":"Ragnapop"},"content":" list.get(no).isDone \u003d false;","lastModifiedDate":"2024-01-23"},{"lineNumber":107,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":108,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(no).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":109,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":110,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":111,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e removecase(String[] tokens, ArrayList\u003cTask\u003e list, int n) throws DukeException{","lastModifiedDate":"2024-01-23"},{"lineNumber":112,"author":{"gitId":"Ragnapop"},"content":" if(tokens.length !\u003d 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":113,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"please give this instruction in the following format: delete [task number]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":114,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":115,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":116,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1])-1;","lastModifiedDate":"2024-01-23"},{"lineNumber":117,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(no).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":118,"author":{"gitId":"Ragnapop"},"content":" list.remove(no);","lastModifiedDate":"2024-01-23"},{"lineNumber":119,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":120,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":121,"author":{"gitId":"Ragnapop"},"content":" n--;","lastModifiedDate":"2024-01-23"},{"lineNumber":122,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":123,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":124,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":125,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":126,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":127,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":128,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":129,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":130,"author":{"gitId":"Ragnapop"},"content":" public static void main(String[] args) throws IOException, DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":133,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2024-01-23"},{"lineNumber":136,"author":{"gitId":"Ragnapop"},"content":" String name \u003d \"Bingus\";","lastModifiedDate":"2024-01-23"},{"lineNumber":137,"author":{"gitId":"Ragnapop"},"content":" intro(name, logo);","lastModifiedDate":"2024-01-23"},{"lineNumber":138,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":139,"author":{"gitId":"Ragnapop"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003cTask\u003e(100);// array to store tasks given","lastModifiedDate":"2024-01-23"},{"lineNumber":140,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":141,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":142,"author":{"gitId":"Ragnapop"},"content":" int n \u003d 0;","lastModifiedDate":"2024-01-23"},{"lineNumber":143,"author":{"gitId":"Ragnapop"},"content":" Scanner bfn \u003d new Scanner(","lastModifiedDate":"2024-01-23"},{"lineNumber":144,"author":{"gitId":"Ragnapop"},"content":" new InputStreamReader(System.in));// scanner to read user input","lastModifiedDate":"2024-01-23"},{"lineNumber":145,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":146,"author":{"gitId":"Ragnapop"},"content":" String str \u003d bfn.nextLine();","lastModifiedDate":"2024-01-23"},{"lineNumber":147,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":148,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":149,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":150,"author":{"gitId":"Ragnapop"},"content":" while (true) {","lastModifiedDate":"2024-01-23"},{"lineNumber":151,"author":{"gitId":"Ragnapop"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":152,"author":{"gitId":"Ragnapop"},"content":" String[] tokens \u003d str.split(\"\\\\s+\");// split read string into individual components to read keywords","lastModifiedDate":"2024-01-23"},{"lineNumber":153,"author":{"gitId":"Ragnapop"},"content":" String identifier \u003d tokens[0];// store keywords","lastModifiedDate":"2024-01-23"},{"lineNumber":154,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":155,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":156,"author":{"gitId":"Ragnapop"},"content":" if (str.equals(\"list\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":157,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":158,"author":{"gitId":"Ragnapop"},"content":" for (int a \u003d 0; a \u003c n; a++) {","lastModifiedDate":"2024-01-23"},{"lineNumber":159,"author":{"gitId":"Ragnapop"},"content":" System.out.println(a + 1 + \". \" + list.get(a).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":160,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":161,"author":{"gitId":"Ragnapop"},"content":" }// if keyword is list, open list","lastModifiedDate":"2024-01-23"},{"lineNumber":162,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":163,"author":{"gitId":"Ragnapop"},"content":" else if (str.equals(\"bye\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":164,"author":{"gitId":"Ragnapop"},"content":" bye();","lastModifiedDate":"2024-01-23"},{"lineNumber":165,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"mark\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":166,"author":{"gitId":"Ragnapop"},"content":" markcase(tokens, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":167,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"unmark\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":168,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1]) - 1;","lastModifiedDate":"2024-01-23"},{"lineNumber":169,"author":{"gitId":"Ragnapop"},"content":" unmarkcase(tokens, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":170,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"event\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":171,"author":{"gitId":"Ragnapop"},"content":" list \u003d eventcase(str, n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":172,"author":{"gitId":"Ragnapop"},"content":" n \u003d addtask(n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":173,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":174,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"deadline\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":175,"author":{"gitId":"Ragnapop"},"content":" list \u003d deadlinecase(str, n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":176,"author":{"gitId":"Ragnapop"},"content":" n \u003d addtask(n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":177,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"todo\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":178,"author":{"gitId":"Ragnapop"},"content":" list \u003d todocase(str, n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":179,"author":{"gitId":"Ragnapop"},"content":" n \u003d addtask(n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":180,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"delete\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":181,"author":{"gitId":"Ragnapop"},"content":" list \u003d removecase(tokens, list, n);","lastModifiedDate":"2024-01-23"},{"lineNumber":182,"author":{"gitId":"Ragnapop"},"content":" n--;","lastModifiedDate":"2024-01-23"},{"lineNumber":183,"author":{"gitId":"Ragnapop"},"content":" } else {","lastModifiedDate":"2024-01-23"},{"lineNumber":184,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":185,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":186,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":187,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":188,"author":{"gitId":"Ragnapop"},"content":" str \u003d bfn.nextLine();","lastModifiedDate":"2024-01-22"},{"lineNumber":189,"author":{"gitId":"Ragnapop"},"content":" }catch(DukeException ex){","lastModifiedDate":"2024-01-24"},{"lineNumber":190,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Exception occured: \" + ex);","lastModifiedDate":"2024-01-23"},{"lineNumber":191,"author":{"gitId":"Ragnapop"},"content":" str \u003d bfn.nextLine();","lastModifiedDate":"2024-01-24"},{"lineNumber":192,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":193,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":195,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":196,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":198,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-01-23"},{"lineNumber":199,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"Ragnapop":189,"-":10}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" super(errorMessage);","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"Ragnapop":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class Event extends Task{","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" protected String from;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":" protected String to;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" super(description);","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" public String getTaskIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":" return \"E\";","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" public String ToString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" return super.ToString() + \" (from: \" + from + \"to: \" + to + \")\";","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ragnapop":20}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" protected String description;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" public String getTaskIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" return \"T\";","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":" public String ToString(){","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":" return \"[\" + getTaskIcon() + \"] \" + \"[\" + getStatusIcon() + \"] \"+ description;","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" //...","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ragnapop":25}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"todo","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"todo homework","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"deadline","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"deadline homework / tuesday","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":"delete","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":"delete 1","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":"mark 2","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Ragnapop":12}}] +[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"T/1/ hi","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"T/0/ what","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"T/0/ gyhu","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"E/0/ fakd/ada/ad","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"D/1/ wtf/wtf","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"Ragnapop":5}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" protected String by;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" super(description);","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":" this.by \u003d by;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" public String getTaskIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" return \"D\";","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" public String ToString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" return super.ToString() + \" (by: \" + by + \")\";","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" public String toStore() {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":" if (isDone) {","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" return getTaskIcon() + \"/\" + \"1\" + \"/\" + description + \"/\" + by;","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":" return getTaskIcon() + \"/\" + \"0\" + \"/\" + description + \"/\" + by;","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ragnapop":28}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":"import static java.lang.System.exit;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":" private static ArrayList\u003cTask\u003e list;","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" private static Storage storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" private static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" public static void intro(String name, String logo) {","lastModifiedDate":"2024-01-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Hello! I\u0027m \\n\" + name);","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"What can I do for you?\\n\");// initial introductory message","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" public static void bye() throws DukeException{","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":" storage.save();","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Ragnapop"},"content":" System.exit(1);// if keyword is bye, exit the program","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"Ragnapop"},"content":" public static void addtask(int n, ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":31,"author":{"gitId":"Ragnapop"},"content":" n++;","lastModifiedDate":"2024-01-23"},{"lineNumber":32,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(n).ToString());","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":38,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e eventcase(String str, int n, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":39,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"event\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":40,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"from\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":41,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"to\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":42,"author":{"gitId":"Ragnapop"},"content":" String[] eventtokens \u003d str.split(\"/\");","lastModifiedDate":"2024-01-22"},{"lineNumber":43,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":44,"author":{"gitId":"Ragnapop"},"content":" if(eventtokens.length \u003c 1) {","lastModifiedDate":"2024-01-23"},{"lineNumber":45,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The description of a event cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":46,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: event [description] / [event starting date] / [event ending date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":47,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":48,"author":{"gitId":"Ragnapop"},"content":" else if(eventtokens.length \u003c 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":49,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The beginning date of a event cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":50,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: event [description] / [event starting date] / [event ending date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":51,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":52,"author":{"gitId":"Ragnapop"},"content":" else if(eventtokens.length \u003c 3) {","lastModifiedDate":"2024-01-23"},{"lineNumber":53,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The ending date of a event cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":54,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: event [description] / [event starting date] / [event ending date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":55,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":56,"author":{"gitId":"Ragnapop"},"content":" String subject \u003d eventtokens[0];","lastModifiedDate":"2024-01-22"},{"lineNumber":57,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":58,"author":{"gitId":"Ragnapop"},"content":" String to \u003d eventtokens[1];","lastModifiedDate":"2024-01-22"},{"lineNumber":59,"author":{"gitId":"Ragnapop"},"content":" String from \u003d eventtokens[2];","lastModifiedDate":"2024-01-22"},{"lineNumber":60,"author":{"gitId":"Ragnapop"},"content":" list.add(new Event(subject, to, from));","lastModifiedDate":"2024-01-23"},{"lineNumber":61,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":62,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":63,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":64,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":65,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":66,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e deadlinecase(String str, int n, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":67,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"deadline\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":68,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"by\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":69,"author":{"gitId":"Ragnapop"},"content":" String[] deadlinetokens \u003d str.split(\"/\");","lastModifiedDate":"2024-01-22"},{"lineNumber":70,"author":{"gitId":"Ragnapop"},"content":" if(deadlinetokens.length \u003c 1) {","lastModifiedDate":"2024-01-23"},{"lineNumber":71,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The description of a deadline cannot be empty.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":72,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: deadline [description] / [deadline date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":73,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":74,"author":{"gitId":"Ragnapop"},"content":" else if(deadlinetokens.length \u003c 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":75,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! You must provide a deadline for this task.\" +","lastModifiedDate":"2024-01-23"},{"lineNumber":76,"author":{"gitId":"Ragnapop"},"content":" \"Please give this instruction in the following format: deadline [description] / [deadline date]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":77,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":78,"author":{"gitId":"Ragnapop"},"content":" String subject \u003d deadlinetokens[0];","lastModifiedDate":"2024-01-22"},{"lineNumber":79,"author":{"gitId":"Ragnapop"},"content":" String deadline \u003d deadlinetokens[1];","lastModifiedDate":"2024-01-22"},{"lineNumber":80,"author":{"gitId":"Ragnapop"},"content":" list.add(new Deadline(subject, deadline));","lastModifiedDate":"2024-01-23"},{"lineNumber":81,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":82,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":83,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":84,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e todocase(String str, int n, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":85,"author":{"gitId":"Ragnapop"},"content":" str \u003d str.replace(\"todo\", \"\");","lastModifiedDate":"2024-01-22"},{"lineNumber":86,"author":{"gitId":"Ragnapop"},"content":" int strcount \u003d str.split(\"\\\\s\").length;","lastModifiedDate":"2024-01-23"},{"lineNumber":87,"author":{"gitId":"Ragnapop"},"content":" ","lastModifiedDate":"2024-01-24"},{"lineNumber":88,"author":{"gitId":"Ragnapop"},"content":" if(strcount \u003d\u003d 1) {","lastModifiedDate":"2024-01-24"},{"lineNumber":89,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! The description of a todo cannot be empty. \" +","lastModifiedDate":"2024-01-23"},{"lineNumber":90,"author":{"gitId":"Ragnapop"},"content":" \" Please give this instruction in the following format: todo [description]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":91,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":92,"author":{"gitId":"Ragnapop"},"content":" list.add(new Task(str));","lastModifiedDate":"2024-01-23"},{"lineNumber":93,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":94,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":95,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":96,"author":{"gitId":"Ragnapop"},"content":" public static void markcase(String[] tokens, ArrayList\u003cTask\u003e list) throws DukeException{","lastModifiedDate":"2024-01-23"},{"lineNumber":97,"author":{"gitId":"Ragnapop"},"content":" if(tokens.length !\u003d 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":98,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"please give this instruction in the following format: mark [task number]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":99,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":100,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1]) - 1;","lastModifiedDate":"2024-01-23"},{"lineNumber":101,"author":{"gitId":"Ragnapop"},"content":" list.get(no).markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":102,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":103,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(no).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":104,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":105,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":106,"author":{"gitId":"Ragnapop"},"content":" public static void unmarkcase(String[] tokens, ArrayList\u003cTask\u003e list) throws DukeException{","lastModifiedDate":"2024-01-23"},{"lineNumber":107,"author":{"gitId":"Ragnapop"},"content":" if(tokens.length !\u003d 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":108,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"please give this instruction in the following format: unmark [task number]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":109,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":110,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1]) - 1;","lastModifiedDate":"2024-01-23"},{"lineNumber":111,"author":{"gitId":"Ragnapop"},"content":" list.get(no).unmarkAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-23"},{"lineNumber":113,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(no).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":114,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":115,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":116,"author":{"gitId":"Ragnapop"},"content":" public static ArrayList\u003cTask\u003e removecase(String[] tokens, ArrayList\u003cTask\u003e list, int n) throws DukeException{","lastModifiedDate":"2024-01-23"},{"lineNumber":117,"author":{"gitId":"Ragnapop"},"content":" if(tokens.length !\u003d 2) {","lastModifiedDate":"2024-01-23"},{"lineNumber":118,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"please give this instruction in the following format: delete [task number]\");","lastModifiedDate":"2024-01-23"},{"lineNumber":119,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":120,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":121,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1])-1;","lastModifiedDate":"2024-01-23"},{"lineNumber":122,"author":{"gitId":"Ragnapop"},"content":" System.out.println(list.get(no).ToString());","lastModifiedDate":"2024-01-23"},{"lineNumber":123,"author":{"gitId":"Ragnapop"},"content":" list.remove(no);","lastModifiedDate":"2024-01-23"},{"lineNumber":124,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":125,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":126,"author":{"gitId":"Ragnapop"},"content":" n--;","lastModifiedDate":"2024-01-23"},{"lineNumber":127,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Now you have \" + n + \" tasks in the list.\");","lastModifiedDate":"2024-01-23"},{"lineNumber":128,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":129,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-23"},{"lineNumber":130,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":131,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":132,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":133,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":134,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":135,"author":{"gitId":"Ragnapop"},"content":" public static void printlist(){","lastModifiedDate":"2024-01-30"},{"lineNumber":136,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":137,"author":{"gitId":"Ragnapop"},"content":" for (int a \u003d 0; a \u003c list.size(); a++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":138,"author":{"gitId":"Ragnapop"},"content":" System.out.println(a + 1 + \". \" + list.get(a).ToString());","lastModifiedDate":"2024-01-30"},{"lineNumber":139,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":140,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":141,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":142,"author":{"gitId":"Ragnapop"},"content":" public static void main(String[] args) throws IOException, DukeException {","lastModifiedDate":"2024-01-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2024-01-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2024-01-23"},{"lineNumber":148,"author":{"gitId":"Ragnapop"},"content":" String name \u003d \"Bingus\";","lastModifiedDate":"2024-01-23"},{"lineNumber":149,"author":{"gitId":"Ragnapop"},"content":" intro(name, logo);","lastModifiedDate":"2024-01-23"},{"lineNumber":150,"author":{"gitId":"Ragnapop"},"content":" storage \u003d new Storage(FILE_PATH);","lastModifiedDate":"2024-01-30"},{"lineNumber":151,"author":{"gitId":"Ragnapop"},"content":" list \u003d storage.load();// array to store tasks given","lastModifiedDate":"2024-01-30"},{"lineNumber":152,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":153,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":154,"author":{"gitId":"Ragnapop"},"content":" int n \u003d list.size();","lastModifiedDate":"2024-01-30"},{"lineNumber":155,"author":{"gitId":"Ragnapop"},"content":" Scanner bfn \u003d new Scanner(","lastModifiedDate":"2024-01-23"},{"lineNumber":156,"author":{"gitId":"Ragnapop"},"content":" new InputStreamReader(System.in));// scanner to read user input","lastModifiedDate":"2024-01-23"},{"lineNumber":157,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":158,"author":{"gitId":"Ragnapop"},"content":" String str \u003d bfn.nextLine();","lastModifiedDate":"2024-01-23"},{"lineNumber":159,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":160,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":161,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":162,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":163,"author":{"gitId":"Ragnapop"},"content":" while (true) {","lastModifiedDate":"2024-01-23"},{"lineNumber":164,"author":{"gitId":"Ragnapop"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":165,"author":{"gitId":"Ragnapop"},"content":" String[] tokens \u003d str.split(\"\\\\s+\");// split read string into individual components to read keywords","lastModifiedDate":"2024-01-23"},{"lineNumber":166,"author":{"gitId":"Ragnapop"},"content":" String identifier \u003d tokens[0];// store keywords","lastModifiedDate":"2024-01-23"},{"lineNumber":167,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":168,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":169,"author":{"gitId":"Ragnapop"},"content":" if (str.equals(\"list\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":170,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":171,"author":{"gitId":"Ragnapop"},"content":" printlist();","lastModifiedDate":"2024-01-30"},{"lineNumber":172,"author":{"gitId":"Ragnapop"},"content":" }// if keyword is list, open list","lastModifiedDate":"2024-01-23"},{"lineNumber":173,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":174,"author":{"gitId":"Ragnapop"},"content":" else if (str.equals(\"bye\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":175,"author":{"gitId":"Ragnapop"},"content":" bye();","lastModifiedDate":"2024-01-23"},{"lineNumber":176,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"mark\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":177,"author":{"gitId":"Ragnapop"},"content":" markcase(tokens, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":178,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"unmark\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":179,"author":{"gitId":"Ragnapop"},"content":" int no \u003d Integer.parseInt(tokens[1]) - 1;","lastModifiedDate":"2024-01-23"},{"lineNumber":180,"author":{"gitId":"Ragnapop"},"content":" unmarkcase(tokens, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":181,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"event\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":182,"author":{"gitId":"Ragnapop"},"content":" list \u003d eventcase(str, n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":183,"author":{"gitId":"Ragnapop"},"content":" addtask(n, list);","lastModifiedDate":"2024-01-30"},{"lineNumber":184,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":185,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"deadline\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":186,"author":{"gitId":"Ragnapop"},"content":" list \u003d deadlinecase(str, n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":187,"author":{"gitId":"Ragnapop"},"content":" addtask(n, list);","lastModifiedDate":"2024-01-30"},{"lineNumber":188,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"todo\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":189,"author":{"gitId":"Ragnapop"},"content":" list \u003d todocase(str, n, list);","lastModifiedDate":"2024-01-23"},{"lineNumber":190,"author":{"gitId":"Ragnapop"},"content":" addtask(n, list);","lastModifiedDate":"2024-01-30"},{"lineNumber":191,"author":{"gitId":"Ragnapop"},"content":" } else if (identifier.equals(\"delete\")) {","lastModifiedDate":"2024-01-23"},{"lineNumber":192,"author":{"gitId":"Ragnapop"},"content":" list \u003d removecase(tokens, list, n);","lastModifiedDate":"2024-01-23"},{"lineNumber":193,"author":{"gitId":"Ragnapop"},"content":" n--;","lastModifiedDate":"2024-01-23"},{"lineNumber":194,"author":{"gitId":"Ragnapop"},"content":" } else {","lastModifiedDate":"2024-01-23"},{"lineNumber":195,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\\n\");","lastModifiedDate":"2024-01-23"},{"lineNumber":196,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":197,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":198,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":199,"author":{"gitId":"Ragnapop"},"content":" str \u003d bfn.nextLine();","lastModifiedDate":"2024-01-22"},{"lineNumber":200,"author":{"gitId":"Ragnapop"},"content":" }catch(DukeException ex){","lastModifiedDate":"2024-01-24"},{"lineNumber":201,"author":{"gitId":"Ragnapop"},"content":" System.out.println(\"Exception occured: \" + ex);","lastModifiedDate":"2024-01-23"},{"lineNumber":202,"author":{"gitId":"Ragnapop"},"content":" str \u003d bfn.nextLine();","lastModifiedDate":"2024-01-24"},{"lineNumber":203,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":204,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":206,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":207,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":209,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-01-23"},{"lineNumber":210,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"Ragnapop":200,"-":10}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":" super(errorMessage);","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"Ragnapop":7}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class Event extends Task{","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" protected String from;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":" protected String to;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" super(description);","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":" this.from \u003d from;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":" this.to \u003d to;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" public String getTaskIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":" return \"E\";","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" public String ToString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" return super.ToString() + \" (from: \" + from + \"to: \" + to + \")\";","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" public String toStore() {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":" if (isDone) {","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" return getTaskIcon() + \"/\" + \"1\" + \"/\" + description + \"/\" + from + \"/\" + to;","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":" return getTaskIcon() + \"/\" + \"0\" + \"/\" + description + \"/\" + from + \"/\" + to;","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ragnapop":28}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"import java.io.File;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"import java.io.FileReader;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"public class Storage {","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":" private File file;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" public Storage(String filePath) throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" if (!this.file.exists()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" this.file.getParentFile().mkdirs();","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":" this.file.createNewFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"Error creating new file\");","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":" public void save() throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Ragnapop"},"content":" try{","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Ragnapop"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Ragnapop"},"content":" for(int a \u003d 0; a \u003c list.size(); a++ ) {","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Ragnapop"},"content":" Task task \u003d list.get(a);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Ragnapop"},"content":" String taskString \u003d task.toStore();","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Ragnapop"},"content":" writer.write(taskString + \"\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Ragnapop"},"content":" writer.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Ragnapop"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"Error saving file\");","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Ragnapop"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Ragnapop"},"content":" try{","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Ragnapop"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Ragnapop"},"content":" String str \u003d bufferedReader.readLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Ragnapop"},"content":" //System.out.println(str);","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Ragnapop"},"content":" while (str !\u003d null){","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"Ragnapop"},"content":" String[] loadtokens \u003d str.split(\"/\");","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"Ragnapop"},"content":" //for(int a \u003d 0; a\u003c loadtokens.length; a++){System.out.println(loadtokens[a]);}","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"Ragnapop"},"content":" String type \u003d loadtokens[0];","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"Ragnapop"},"content":" String status \u003d loadtokens[1];","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Ragnapop"},"content":" String desc \u003d loadtokens[2];","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Ragnapop"},"content":" Task task;","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Ragnapop"},"content":" switch (type) {","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Ragnapop"},"content":" case \"T\":","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Ragnapop"},"content":" task \u003d new Task(desc);","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Ragnapop"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Ragnapop"},"content":" case \"E\":","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Ragnapop"},"content":" String to \u003d loadtokens[3];","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Ragnapop"},"content":" String from \u003d loadtokens[4];","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"Ragnapop"},"content":" task \u003d new Event(desc, to, from);","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"Ragnapop"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Ragnapop"},"content":" case \"D\":","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Ragnapop"},"content":" String duedate \u003d loadtokens[3];","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Ragnapop"},"content":" task \u003d new Deadline(desc, duedate);","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"Ragnapop"},"content":" break;","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Ragnapop"},"content":" default:","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"File corrupted.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"Ragnapop"},"content":" if(status.equals(\"1\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Ragnapop"},"content":" task.markAsDone();","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Ragnapop"},"content":" list.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"Ragnapop"},"content":" str \u003d bufferedReader.readLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"Ragnapop"},"content":" bufferedReader.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"Ragnapop"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"Error loading tasks from file\");","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"Ragnapop"},"content":" catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"Ragnapop"},"content":" throw new DukeException(\"Error saving file\");","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"Ragnapop"},"content":" return list;","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"Ragnapop"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"Ragnapop":85}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"public class Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":" protected String description;","lastModifiedDate":"2024-01-22"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-22"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-22"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-22"},{"lineNumber":13,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"Ragnapop"},"content":" public String getTaskIcon() {","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"Ragnapop"},"content":" return \"T\";","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"Ragnapop"},"content":" public String ToString(){","lastModifiedDate":"2024-01-22"},{"lineNumber":20,"author":{"gitId":"Ragnapop"},"content":" return \"[\" + getTaskIcon() + \"] \" + \"[\" + getStatusIcon() + \"] \"+ description;","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"Ragnapop"},"content":" public void markAsDone(){","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Ragnapop"},"content":" isDone \u003d true;","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Ragnapop"},"content":" public void unmarkAsDone(){","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Ragnapop"},"content":" isDone \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Ragnapop"},"content":" public String toStore(){","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Ragnapop"},"content":" if(isDone) {","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Ragnapop"},"content":" return getTaskIcon() + \"/\" + \"1\" + \"/\" + description;","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Ragnapop"},"content":" } else{","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Ragnapop"},"content":" return getTaskIcon() + \"/\" + \"0\" + \"/\" + description;","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Ragnapop"},"content":" //...","lastModifiedDate":"2024-01-22"},{"lineNumber":41,"author":{"gitId":"Ragnapop"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":42,"author":{"gitId":"Ragnapop"},"content":"","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"Ragnapop":42}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Ragnapop"},"content":"todo","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Ragnapop"},"content":"todo homework","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Ragnapop"},"content":"deadline","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Ragnapop"},"content":"deadline homework / tuesday","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Ragnapop"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Ragnapop"},"content":"delete","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Ragnapop"},"content":"delete 1","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Ragnapop"},"content":"mark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Ragnapop"},"content":"unmark 1","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Ragnapop"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Ragnapop"},"content":"mark 2","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Ragnapop"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Ragnapop":12}}] diff --git a/Ragnapop_ip_master/commits.json b/Ragnapop_ip_master/commits.json index 76e59b82..d07d6778 100644 --- a/Ragnapop_ip_master/commits.json +++ b/Ragnapop_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Ragnapop":[{"date":"2024-01-22","commitResults":[{"hash":"2bf549a08de984bfc17f30cfcfbcd62a7abd0d0c","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0.-Rename,-Greet,-Exit"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"143b6bb9a1632144e97871ac683ef61c29e798f1","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1.-Echo"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}},{"hash":"adc3aa433e26ba8341cd67afceb0020059e88eb6","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3","Level-2-Level-2.-Add,-List"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":9}}},{"hash":"636fafd14b61f6bd4994845ff8c7e164a82da0da","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4.-ToDos,-Events,-Deadlines"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":4}}}]},{"date":"2024-01-23","commitResults":[{"hash":"f772a90f4492ceb35cdecb13ab9bc4b06d17f790","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5.-Handle-Errors"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":80}}},{"hash":"244501d0146763a4bbba950c8042d6774072e603","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6.-Delete"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":22}}}]},{"date":"2024-01-24","commitResults":[{"hash":"5676b4c2cd93be15a5ac19059ac3608e7c300390","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"ea1c9e2abb740f9ec385cf3124095e561dd73c8d","isMergeCommit":false,"messageTitle":"update","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"0f137decbbe13a531b979f0b0580dfc789435dc1","isMergeCommit":false,"messageTitle":"UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Ragnapop":{"java":258,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":12}},"authorContributionVariance":{"Ragnapop":13065.223},"authorDisplayNameMap":{"Ragnapop":"CS2103T-T15-2 LOH .. HUN"}} +{"authorDailyContributionsMap":{"Ragnapop":[{"date":"2024-01-22","commitResults":[{"hash":"2bf549a08de984bfc17f30cfcfbcd62a7abd0d0c","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0.-Rename,-Greet,-Exit"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"143b6bb9a1632144e97871ac683ef61c29e798f1","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1.-Echo"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}},{"hash":"adc3aa433e26ba8341cd67afceb0020059e88eb6","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3","Level-2-Level-2.-Add,-List"],"fileTypesAndContributionMap":{"java":{"insertions":93,"deletions":9}}},{"hash":"636fafd14b61f6bd4994845ff8c7e164a82da0da","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4.-ToDos,-Events,-Deadlines"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":4}}}]},{"date":"2024-01-23","commitResults":[{"hash":"f772a90f4492ceb35cdecb13ab9bc4b06d17f790","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5.-Handle-Errors"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":80}}},{"hash":"244501d0146763a4bbba950c8042d6774072e603","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6.-Delete"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":22}}}]},{"date":"2024-01-24","commitResults":[{"hash":"5676b4c2cd93be15a5ac19059ac3608e7c300390","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"ea1c9e2abb740f9ec385cf3124095e561dd73c8d","isMergeCommit":false,"messageTitle":"update","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":9,"deletions":5}}},{"hash":"0f137decbbe13a531b979f0b0580dfc789435dc1","isMergeCommit":false,"messageTitle":"UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":2}}}]},{"date":"2024-01-30","commitResults":[{"hash":"b2e7e712dbd99dbdf80b12578618e46bf1ebeec5","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7.-Save"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":149,"deletions":17}}},{"hash":"a7a4bf9dafc29e69f1da9f7be67a3cb8586cde39","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Ragnapop/branch-Level-7","messageBody":"Level 7. Save","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Ragnapop":{"java":390,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":17}},"authorContributionVariance":{"Ragnapop":9409.079},"authorDisplayNameMap":{"Ragnapop":"CS2103T-T15-2 LOH .. HUN"}} diff --git a/Tanzhiheng26_ip_master/authorship.json b/Tanzhiheng26_ip_master/authorship.json index 021f9f2c..5a744e04 100644 --- a/Tanzhiheng26_ip_master/authorship.json +++ b/Tanzhiheng26_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/ezra.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"T | 0 | join sports club","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"D | 1 | task | 28/01/2023 1800","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"E | 0 | task | 28/01/2023 1800 | 28/01/2023 1900","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"D | 0 | d | 29/01/2024 1800","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":4}},{"path":"src/main/java/ezra/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" protected LocalDateTime by;","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" protected String byInput;","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" public Deadline(String description, String by) throws DateTimeParseException {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" this.byInput \u003d by;","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" String byString \u003d this.by.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy hh:mm a\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"[D][%s] %s (by: %s)\", this.getStatusIcon(), this.description, byString);","lastModifiedDate":"2024-01-28"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"D | %d | %s | %s\", this.isDone ? 1 : 0, this.description, this.byInput);","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" return true;","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" if (!(o instanceof Deadline d)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" return false;","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" return this.description.equals(d.description) \u0026\u0026 this.byInput.equals(d.byInput);","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Tanzhiheng26":36}},{"path":"src/main/java/ezra/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-21"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" protected LocalDateTime start;","lastModifiedDate":"2024-01-28"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" protected LocalDateTime end;","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" protected String startInput;","lastModifiedDate":"2024-01-28"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" protected String endInput;","lastModifiedDate":"2024-01-28"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-21"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" public Event(String description, String start, String end) throws DateTimeParseException {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" super(description);","lastModifiedDate":"2024-01-21"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" this.start \u003d LocalDateTime.parse(start, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" this.end \u003d LocalDateTime.parse(end, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" this.startInput \u003d start;","lastModifiedDate":"2024-01-28"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" this.endInput \u003d end;","lastModifiedDate":"2024-01-28"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-21"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-21"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-21"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" String startString \u003d this.start.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy hh:mm a\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" String endString \u003d this.end.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy hh:mm a\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(","lastModifiedDate":"2024-01-21"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" \"[E][%s] %s (from: %s | to: %s)\",","lastModifiedDate":"2024-01-21"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" this.getStatusIcon(),","lastModifiedDate":"2024-01-21"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" this.description,","lastModifiedDate":"2024-01-21"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" startString,","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" endString","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-21"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"E | %d | %s | %s | %s\", this.isDone ? 1 : 0,","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" this.description,","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" this.startInput,","lastModifiedDate":"2024-01-28"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" this.endInput","lastModifiedDate":"2024-01-28"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-28"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" return true;","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" if (!(o instanceof Event e)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" return false;","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" return this.description.equals(e.description) \u0026\u0026","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" this.startInput.equals(e.startInput) \u0026\u0026","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" this.endInput.equals(e.endInput);","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-21"}],"authorContributionMap":{"Tanzhiheng26":54}},{"path":"src/main/java/ezra/Ezra.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.File;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"public class Ezra {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" private Ui ui;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" private Storage storage;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" public Ezra(String filepath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tYou have no saved tasks\");","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" public void run() {","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" ui.greet();","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2024-01-21"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-21"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.read(input, storage, tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2024-01-21"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" break;","lastModifiedDate":"2024-01-21"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" scanner.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" new Ezra(\"data\" + File.separator + \"ezra.txt\").run();","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Tanzhiheng26":39,"-":1}},{"path":"src/main/java/ezra/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class Parser {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":" public static void read(String input, Storage storage, TaskList tasks) {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.listTasks();","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.mark(Parser.parseMark(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.unmark(Parser.parseUnmark(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.delete(Parser.parseDelete(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.updateTasks(Parser.parseToDo(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.updateTasks(Parser.parseDeadline(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.updateTasks(Parser.parseEvent(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid command\");","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (WrongFormatException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\t\" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tDate time must be in this format: 28/01/2023 1800\");","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" public static ToDo parseToDo(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"todo\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d input.split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" return new ToDo(description);","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027todo\u0027 command format. Usage: todo \u003cdescription\u003e\"","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" public static Deadline parseDeadline(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"deadline\\\\s\\\\S.*\\\\s/by\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" String[] arr \u003d input.split(\"\\\\s/by\\\\s\");","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" String by \u003d arr[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d arr[0].split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" return new Deadline(description, by);","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027deadline\u0027 command format. Usage: deadline \u003cdescription\u003e /by \u003cdate time\u003e\"","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Tanzhiheng26"},"content":" public static Event parseEvent(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"event\\\\s\\\\S.*\\\\s/from\\\\s\\\\S.*\\\\s/to\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Tanzhiheng26"},"content":" String[] splitTo \u003d input.split(\"\\\\s/to\\\\s\");","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Tanzhiheng26"},"content":" String to \u003d splitTo[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Tanzhiheng26"},"content":" String[] splitFrom \u003d splitTo[0].split(\"\\\\s/from\\\\s\");","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Tanzhiheng26"},"content":" String from \u003d splitFrom[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d splitFrom[0].split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Tanzhiheng26"},"content":" return new Event(description, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027event\u0027 command format. Usage: event \u003cdescription\u003e /from \u003cdate time\u003e /to \u003cdate time\u003e\"","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Tanzhiheng26"},"content":" public static int parseDelete(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"delete\\\\s\\\\d+\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Tanzhiheng26"},"content":" return Integer.parseInt(input.split(\"\\\\s\")[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027delete\u0027 command format. Usage: delete \u003cexisting task number\u003e\"","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Tanzhiheng26"},"content":" public static int parseMark(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"mark\\\\s\\\\d+\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Tanzhiheng26"},"content":" return Integer.parseInt(input.split(\"\\\\s\")[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027mark\u0027 command format. Usage: mark \u003cexisting task number\u003e\"","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Tanzhiheng26"},"content":" public static int parseUnmark(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"unmark\\\\s\\\\d+\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":98,"author":{"gitId":"Tanzhiheng26"},"content":" return Integer.parseInt(input.split(\"\\\\s\")[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027unmark\u0027 command format. Usage: unmark \u003cexisting task number\u003e\"","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":105}},{"path":"src/main/java/ezra/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"public class Storage {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" String filepath;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" public Storage(String filepath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" public void writeToFile(TaskList tasks) throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" directory.mkdir();","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" File f \u003d new File(\"data\" + File.separator + \"ezra.txt\");","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" f.createNewFile();","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" for (Task t : tasks.arrayList) {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" builder.append(t.toString2()).append(\"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" fw.write(builder.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" public File load() {","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" return new File(filepath);","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":30}},{"path":"src/main/java/ezra/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"public class Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" protected String description;","lastModifiedDate":"2024-01-20"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-20"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-20"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-20"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-20"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-20"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2024-01-20"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"%s | %s\", this.isDone ? 1 : 0, this.description);","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Tanzhiheng26":24}},{"path":"src/main/java/ezra/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":"public class TaskList {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" protected ArrayList\u003cTask\u003e arrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" public TaskList() {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" public TaskList(File f) throws FileNotFoundException{","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" String task \u003d s.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" String[] arr \u003d task.split(\" \\\\| \");","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" String command \u003d arr[0];","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" boolean isDone \u003d arr[1].equals(\"1\");","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d arr[2];","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" if (command.equals(\"T\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" todo.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.add(todo);","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (command.equals(\"D\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" String by \u003d arr[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" deadline.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.add(deadline);","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" String from \u003d arr[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" String to \u003d arr[4];","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" event.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.add(event);","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" public void listTasks() {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" if (this.arrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tThere are no tasks in your list.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" for (int i \u003d 0; i \u003c this.arrayList.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t%d.%s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" i + 1,","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.get(i)","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Tanzhiheng26"},"content":" public void delete(int taskIndex, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Tanzhiheng26"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d this.arrayList.size()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid task number\");","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tNoted, I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t %s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.get(taskIndex)","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.remove(taskIndex);","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(\"\\tNow you have %d tasks in the list.\\n\", this.arrayList.size());","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Tanzhiheng26"},"content":" public void updateTasks(Task task, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(\"\\tGot it. I\u0027ve added this task:\\n\\t %s\\n\", task);","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(\"\\tNow you have %d tasks in the list.\\n\", this.arrayList.size());","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Tanzhiheng26"},"content":" public void mark(int taskIndex, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Tanzhiheng26"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d this.arrayList.size()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid task number\");","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.get(taskIndex).isDone \u003d true;","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tNice! I have marked this task as done:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t %s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.get(taskIndex)","lastModifiedDate":"2024-01-29"},{"lineNumber":98,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Tanzhiheng26"},"content":" public void unmark(int taskIndex, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Tanzhiheng26"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d this.arrayList.size()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":108,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid task number\");","lastModifiedDate":"2024-01-29"},{"lineNumber":109,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":110,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":111,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.get(taskIndex).isDone \u003d false;","lastModifiedDate":"2024-01-29"},{"lineNumber":112,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tOK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":113,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":114,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t %s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":115,"author":{"gitId":"Tanzhiheng26"},"content":" this.arrayList.get(taskIndex)","lastModifiedDate":"2024-01-29"},{"lineNumber":116,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-29"},{"lineNumber":117,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":118,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":119,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":120,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":121,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":123,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":123}},{"path":"src/main/java/ezra/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"public class ToDo extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" public ToDo(String description) {","lastModifiedDate":"2024-01-20"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"[T][%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"T | %d | %s\", this.isDone ? 1 : 0, this.description);","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" return true;","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" if (!(o instanceof ToDo t)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" return false;","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" return this.description.equals(t.description);","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Tanzhiheng26":27}},{"path":"src/main/java/ezra/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"public class Ui {","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" public static void horizontalLine() {","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\t────────────────────────────────────────────────────────────\");","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":" public void greet() {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tHello! I\u0027m Ezra.\\n\\tWhat can I do for you?\");","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":12}},{"path":"src/main/java/ezra/WrongFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"public class WrongFormatException extends Exception {","lastModifiedDate":"2024-01-21"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2024-01-21"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" super(message);","lastModifiedDate":"2024-01-21"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-21"}],"authorContributionMap":{"Tanzhiheng26":7}},{"path":"src/test/java/ezra/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class DeadlineTest {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" public void testToString() {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline1 \u003d new Deadline(\"Return book\", \"29/01/2024 1800\");","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString1 \u003d \"[D][ ] Return book (by: 29 Jan 2024 06:00 pm)\";","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString1, deadline1.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline2 \u003d new Deadline(\"Finish assignment\", \"01/02/2024 0000\");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString2 \u003d \"[D][ ] Finish assignment (by: 01 Feb 2024 12:00 am)\";","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString2, deadline2.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" public void testToString2() {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline1 \u003d new Deadline(\"Return book\", \"29/01/2024 1800\");","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString1 \u003d \"D | 0 | Return book | 29/01/2024 1800\";","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString1, deadline1.toString2());","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline2 \u003d new Deadline(\"Finish assignment\", \"01/02/2024 0000\");","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString2 \u003d \"D | 0 | Finish assignment | 01/02/2024 0000\";","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString2, deadline2.toString2());","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":28}},{"path":"src/test/java/ezra/TestParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"public class TestParser {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" public void TestParseDeadline() throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline /by 29/01/24 1800\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books /by\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books by 29/01/24 1800\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(new Deadline(\"return books\", \"29/01/2024 1800\"),","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books /by 29/01/2024 1800\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" public void TestParseDelete() throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(0, Parser.parseDelete(\"delete 1\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(9, Parser.parseDelete(\"delete 10\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete -1\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete abc\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete 12a\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete \"));","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"todo borrow book","lastModifiedDate":"2024-01-21"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-21"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-21"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"list","lastModifiedDate":"2024-01-21"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"mark 2","lastModifiedDate":"2024-01-21"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"list","lastModifiedDate":"2024-01-21"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"unmark 2","lastModifiedDate":"2024-01-21"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":"list","lastModifiedDate":"2024-01-21"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":"delete 1","lastModifiedDate":"2024-01-21"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"list","lastModifiedDate":"2024-01-21"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"bye","lastModifiedDate":"2024-01-21"}],"authorContributionMap":{"Tanzhiheng26":11}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":"java -classpath ..\\bin Ezra \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Tanzhiheng26":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" mainClass.set(\"ezra.Ezra\")","lastModifiedDate":"2024-01-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":"Tanzhiheng26"},"content":" archiveBaseName \u003d \"ezra\"","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" archiveFileName \u003d \u0027ezra.jar\u0027","lastModifiedDate":"2024-01-30"},{"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":{"Tanzhiheng26":3,"-":40}},{"path":"data/ezra.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"D | 1 | task | 28/01/2023 1800","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"E | 0 | task | 28/01/2023 1800 | 28/01/2023 1900","lastModifiedDate":"2024-01-28"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"D | 0 | d | 29/01/2024 1800","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":3}},{"path":"src/main/java/ezra/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" protected LocalDateTime by;","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" protected String byInput;","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs a Deadline object with the specified description and deadline.","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" * @param by The deadline of the task in the format \"dd/MM/yyyy HHmm\".","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws DateTimeParseException If the deadline format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" public Deadline(String description, String by) throws DateTimeParseException {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" this.by \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" this.byInput \u003d by;","lastModifiedDate":"2024-01-28"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the Deadline object to display to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string including task type, status, description, and deadline.","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" String byString \u003d this.by.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy hh:mm a\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"[D][%s] %s (by: %s)\", this.getStatusIcon(), this.description, byString);","lastModifiedDate":"2024-01-28"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the Deadline object for storage purposes.","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string suitable for storage, including task type, status, description, and deadline.","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"D | %d | %s | %s\", this.isDone ? 1 : 0, this.description, this.byInput);","lastModifiedDate":"2024-01-28"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" * Checks if this Deadline object is equal to another object.","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" * @param o The object to compare to.","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Tanzhiheng26"},"content":" return true;","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Tanzhiheng26"},"content":" if (!(o instanceof Deadline)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Tanzhiheng26"},"content":" return false;","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline d \u003d (Deadline) o;","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"Tanzhiheng26"},"content":" return this.description.equals(d.description) \u0026\u0026 this.byInput.equals(d.byInput);","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Tanzhiheng26":65}},{"path":"src/main/java/ezra/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-28"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" * Represents a task with a specific start and end time.","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-21"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" protected LocalDateTime start;","lastModifiedDate":"2024-01-28"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" protected LocalDateTime end;","lastModifiedDate":"2024-01-28"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" protected String startInput;","lastModifiedDate":"2024-01-28"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" protected String endInput;","lastModifiedDate":"2024-01-28"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-21"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs an Event object with the specified description, start time, and end time.","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" * @param start The start time of the event in the format \"dd/MM/yyyy HHmm\".","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" * @param end The end time of the event in the format \"dd/MM/yyyy HHmm\".","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws DateTimeParseException If the start or end time format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" public Event(String description, String start, String end) throws DateTimeParseException {","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" super(description);","lastModifiedDate":"2024-01-21"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" this.start \u003d LocalDateTime.parse(start, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" this.end \u003d LocalDateTime.parse(end, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" this.startInput \u003d start;","lastModifiedDate":"2024-01-28"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" this.endInput \u003d end;","lastModifiedDate":"2024-01-28"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-21"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the Event object to display to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string including task type, status, description, start time, and end time.","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-21"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-21"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" String startString \u003d this.start.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy hh:mm a\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" String endString \u003d this.end.format(DateTimeFormatter.ofPattern(\"dd MMM yyyy hh:mm a\"));","lastModifiedDate":"2024-01-28"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(","lastModifiedDate":"2024-01-21"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" \"[E][%s] %s (from: %s | to: %s)\",","lastModifiedDate":"2024-01-21"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" this.getStatusIcon(),","lastModifiedDate":"2024-01-21"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" this.description,","lastModifiedDate":"2024-01-21"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" startString,","lastModifiedDate":"2024-01-28"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" endString","lastModifiedDate":"2024-01-28"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-21"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the Event object for storage purposes.","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string suitable for storage, including task type, status, description, start time,","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" * and end time.","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"E | %d | %s | %s | %s\", this.isDone ? 1 : 0,","lastModifiedDate":"2024-01-28"},{"lineNumber":59,"author":{"gitId":"Tanzhiheng26"},"content":" this.description,","lastModifiedDate":"2024-01-28"},{"lineNumber":60,"author":{"gitId":"Tanzhiheng26"},"content":" this.startInput,","lastModifiedDate":"2024-01-28"},{"lineNumber":61,"author":{"gitId":"Tanzhiheng26"},"content":" this.endInput","lastModifiedDate":"2024-01-28"},{"lineNumber":62,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-28"},{"lineNumber":63,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"Tanzhiheng26"},"content":" * Checks if this Event object is equal to another object.","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Tanzhiheng26"},"content":" * @param o The object to compare to.","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"Tanzhiheng26"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Tanzhiheng26"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Tanzhiheng26"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Tanzhiheng26"},"content":" return true;","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Tanzhiheng26"},"content":" if (!(o instanceof Event)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"Tanzhiheng26"},"content":" return false;","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Tanzhiheng26"},"content":" Event e \u003d (Event) o;","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"Tanzhiheng26"},"content":" return this.description.equals(e.description)","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"Tanzhiheng26"},"content":" \u0026\u0026 this.startInput.equals(e.startInput)","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"Tanzhiheng26"},"content":" \u0026\u0026 this.endInput.equals(e.endInput);","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-21"}],"authorContributionMap":{"Tanzhiheng26":84}},{"path":"src/main/java/ezra/Ezra.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.File;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" * Main class for the Ezra chatbot.","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"public class Ezra {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" private Ui ui;","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" private Storage storage;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs an Ezra object with the specified file path to load saved tasks from.","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" * @param filepath The file path for storing tasks.","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" public Ezra(String filepath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" this.storage \u003d new Storage(filepath);","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" * Runs the Ezra application, allowing the user to enter commands.","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" public void run() {","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" ui.greet();","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-20"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2024-01-21"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2024-01-21"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.read(input, storage, tasks);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2024-01-21"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" break;","lastModifiedDate":"2024-01-21"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" scanner.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" * The main method to start the Ezra application.","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" * @param args Command line arguments (not used in this application).","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" new Ezra(\"data\" + File.separator + \"ezra.txt\").run();","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Tanzhiheng26":56,"-":1}},{"path":"src/main/java/ezra/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses user input commands and performs corresponding actions.","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"public class Parser {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" * Reads the user input, processes the command, and updates the task list.","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" * @param storage Storage object for writing tasks to a file.","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" * @param tasks TaskList object for managing tasks.","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" public static void read(String input, Storage storage, TaskList tasks) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.listTasks();","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"mark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.mark(Parser.parseMark(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.unmark(Parser.parseUnmark(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"delete\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.delete(Parser.parseDelete(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.updateTasks(Parser.parseToDo(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.updateTasks(Parser.parseDeadline(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.updateTasks(Parser.parseEvent(input), storage);","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (input.startsWith(\"find\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" tasks.find(Parser.parseFind(input));","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid command\");","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (WrongFormatException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\t\" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tDate time must be in this format: 28/01/2023 1800\");","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses a \u0027todo\u0027 command from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A ToDo object representing the task to be added.","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"Tanzhiheng26"},"content":" public static ToDo parseToDo(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"todo\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d input.split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Tanzhiheng26"},"content":" return new ToDo(description);","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(\"Invalid \u0027todo\u0027 command format. Usage: todo \u003cdescription\u003e\");","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses a \u0027deadline\u0027 command from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A Deadline object representing the task to be added.","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"Tanzhiheng26"},"content":" public static Deadline parseDeadline(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"deadline\\\\s\\\\S.*\\\\s/by\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Tanzhiheng26"},"content":" String[] arr \u003d input.split(\"\\\\s/by\\\\s\");","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Tanzhiheng26"},"content":" String by \u003d arr[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d arr[0].split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Tanzhiheng26"},"content":" return new Deadline(description, by);","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027deadline\u0027 command format. Usage: deadline \u003cdescription\u003e /by \u003cdate time\u003e\");","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses an \u0027event\u0027 command from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"Tanzhiheng26"},"content":" * @return An Event object representing the task to be added.","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"Tanzhiheng26"},"content":" public static Event parseEvent(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"event\\\\s\\\\S.*\\\\s/from\\\\s\\\\S.*\\\\s/to\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Tanzhiheng26"},"content":" String[] splitTo \u003d input.split(\"\\\\s/to\\\\s\");","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Tanzhiheng26"},"content":" String to \u003d splitTo[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Tanzhiheng26"},"content":" String[] splitFrom \u003d splitTo[0].split(\"\\\\s/from\\\\s\");","lastModifiedDate":"2024-01-29"},{"lineNumber":98,"author":{"gitId":"Tanzhiheng26"},"content":" String from \u003d splitFrom[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d splitFrom[0].split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Tanzhiheng26"},"content":" return new Event(description, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027event\u0027 command format. Usage: event \u003cdescription\u003e /from \u003cdate time\u003e /to \u003cdate time\u003e\");","lastModifiedDate":"2024-01-30"},{"lineNumber":104,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":108,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses a \u0027delete\u0027 command from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":109,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":111,"author":{"gitId":"Tanzhiheng26"},"content":" * @return The index of the task to be deleted. Invalid index is handled by delete in TaskList.","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":113,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"Tanzhiheng26"},"content":" public static int parseDelete(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":115,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"delete\\\\s\\\\d+\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":116,"author":{"gitId":"Tanzhiheng26"},"content":" return Integer.parseInt(input.split(\"\\\\s\")[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":117,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":118,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(\"Invalid \u0027delete\u0027 command format. Usage: delete \u003cexisting task number\u003e\");","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":120,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":121,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":123,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses a \u0027mark\u0027 command from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":124,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":125,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":126,"author":{"gitId":"Tanzhiheng26"},"content":" * @return The index of the task to be marked as done. Invalid index is handled by mark in TaskList.","lastModifiedDate":"2024-01-30"},{"lineNumber":127,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":128,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":129,"author":{"gitId":"Tanzhiheng26"},"content":" public static int parseMark(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":130,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"mark\\\\s\\\\d+\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":131,"author":{"gitId":"Tanzhiheng26"},"content":" return Integer.parseInt(input.split(\"\\\\s\")[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":132,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":133,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(\"Invalid \u0027mark\u0027 command format. Usage: mark \u003cexisting task number\u003e\");","lastModifiedDate":"2024-01-30"},{"lineNumber":134,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":135,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":136,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":137,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":138,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses an \u0027unmark\u0027 command from the user input.","lastModifiedDate":"2024-01-30"},{"lineNumber":139,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":140,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":141,"author":{"gitId":"Tanzhiheng26"},"content":" * @return The index of the task to be marked as not done. Invalid index is handled by unmark in TaskList.","lastModifiedDate":"2024-01-30"},{"lineNumber":142,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":143,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":144,"author":{"gitId":"Tanzhiheng26"},"content":" public static int parseUnmark(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":145,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"unmark\\\\s\\\\d+\", input)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":146,"author":{"gitId":"Tanzhiheng26"},"content":" return Integer.parseInt(input.split(\"\\\\s\")[1]) - 1;","lastModifiedDate":"2024-01-29"},{"lineNumber":147,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":148,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(\"Invalid \u0027unmark\u0027 command format. Usage: unmark \u003cexisting task number\u003e\");","lastModifiedDate":"2024-01-30"},{"lineNumber":149,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":150,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":151,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":152,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":153,"author":{"gitId":"Tanzhiheng26"},"content":" * Parses a \u0027find\u0027 command from the user input and extracts the keyword to search for.","lastModifiedDate":"2024-01-30"},{"lineNumber":154,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":155,"author":{"gitId":"Tanzhiheng26"},"content":" * @param input The user input command.","lastModifiedDate":"2024-01-30"},{"lineNumber":156,"author":{"gitId":"Tanzhiheng26"},"content":" * @return The keyword to search for in task descriptions.","lastModifiedDate":"2024-01-30"},{"lineNumber":157,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws WrongFormatException If the command format is invalid.","lastModifiedDate":"2024-01-30"},{"lineNumber":158,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":159,"author":{"gitId":"Tanzhiheng26"},"content":" public static String parseFind(String input) throws WrongFormatException {","lastModifiedDate":"2024-01-30"},{"lineNumber":160,"author":{"gitId":"Tanzhiheng26"},"content":" if (Pattern.matches(\"find\\\\s\\\\S.*\", input)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":161,"author":{"gitId":"Tanzhiheng26"},"content":" return input.split(\"\\\\s\", 2)[1];","lastModifiedDate":"2024-01-30"},{"lineNumber":162,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":163,"author":{"gitId":"Tanzhiheng26"},"content":" throw new WrongFormatException(","lastModifiedDate":"2024-01-30"},{"lineNumber":164,"author":{"gitId":"Tanzhiheng26"},"content":" \"Invalid \u0027find\u0027 command format. Usage: find \u003ckeyword\u003e\"","lastModifiedDate":"2024-01-30"},{"lineNumber":165,"author":{"gitId":"Tanzhiheng26"},"content":" );","lastModifiedDate":"2024-01-30"},{"lineNumber":166,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":167,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":168,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":168}},{"path":"src/main/java/ezra/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" * Handles the storage of tasks in a file.","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"public class Storage {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" String filepath;","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" * @param filepath The file path for storing tasks.","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" public Storage(String filepath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" * Writes the tasks from a TaskList to the storage file.","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" * @param taskList The TaskList containing tasks to be written to the file.","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws IOException If an I/O error occurs while writing to the file.","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" public void writeToFile(TaskList taskList) throws IOException {","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" // Create data directory if it does not exist","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" directory.mkdir();","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" // Create ezra.txt in data directory if it does not exist","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" File f \u003d new File(\"data\" + File.separator + \"ezra.txt\");","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" f.createNewFile();","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" // Write tasks to ezra.txt","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" for (Task t : taskList.tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" builder.append(t.toString2()).append(\"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" fw.write(builder.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" * Loads the storage file.","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" * @return The File object representing the storage file.","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" public File load() {","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" return new File(filepath);","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":56}},{"path":"src/main/java/ezra/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" * Represents a generic task with a description and completion status.","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" protected String description;","lastModifiedDate":"2024-01-20"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-20"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs a Task object with the specified description.","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" * @param description The description of the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" public Task(String description) {","lastModifiedDate":"2024-01-20"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" this.description \u003d description;","lastModifiedDate":"2024-01-20"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-20"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" * Gets the status icon for the task.","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" * @return \"X\" if the task is done, \" \" (space) otherwise.","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-20"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-20"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the Task object to display to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string including the status icon and description.","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"[%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2024-01-20"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the Task object for storage purposes.","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string suitable for storage, including the completion status and description.","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"%s | %s\", this.isDone ? 1 : 0, this.description);","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Tanzhiheng26":48}},{"path":"src/main/java/ezra/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" * Represents a collection of tasks and provides methods for managing them.","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":"public class TaskList {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" protected ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" public TaskList() {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs a TaskList by reading tasks from a file.","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" * @param f The file containing tasks.","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" * @throws FileNotFoundException If the specified file is not found.","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" public TaskList(File f) throws FileNotFoundException{","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" while (s.hasNextLine()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" // Extract command, isDone and description from input","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" String task \u003d s.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" String[] arr \u003d task.split(\" \\\\| \");","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" String command \u003d arr[0];","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" boolean isDone \u003d arr[1].equals(\"1\");","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" String description \u003d arr[2];","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" if (command.equals(\"T\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" todo.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.add(todo);","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" } else if (command.equals(\"D\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" String by \u003d arr[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline \u003d new Deadline(description, by);","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" deadline.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" String from \u003d arr[3];","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" String to \u003d arr[4];","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":" event.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.add(event);","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Tanzhiheng26"},"content":" * Lists all tasks in the TaskList.","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Tanzhiheng26"},"content":" public void listTasks() {","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Tanzhiheng26"},"content":" if (this.tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tThere are no tasks in your list.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Tanzhiheng26"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t%d.%s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Tanzhiheng26"},"content":" i + 1,","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(i));","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"Tanzhiheng26"},"content":" * Deletes a task at the specified index.","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"Tanzhiheng26"},"content":" * @param taskIndex The arrayList index of the task in to be deleted.","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"Tanzhiheng26"},"content":" * @param storage The storage to update after deletion.","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Tanzhiheng26"},"content":" public void delete(int taskIndex, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Tanzhiheng26"},"content":" // Check for invalid taskIndex","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"Tanzhiheng26"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid task number\");","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"Tanzhiheng26"},"content":" // Print task that was deleted and number of tasks remaining","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tNoted, I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t %s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(taskIndex));","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.remove(taskIndex);","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(\"\\tNow you have %d tasks in the list.\\n\", this.tasks.size());","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"Tanzhiheng26"},"content":" // Update tasks in storage","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":107,"author":{"gitId":"Tanzhiheng26"},"content":" * Updates the TaskList by adding a new task.","lastModifiedDate":"2024-01-30"},{"lineNumber":108,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":109,"author":{"gitId":"Tanzhiheng26"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"Tanzhiheng26"},"content":" * @param storage The storage to update after addition.","lastModifiedDate":"2024-01-30"},{"lineNumber":111,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"Tanzhiheng26"},"content":" public void updateTasks(Task task, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":113,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":115,"author":{"gitId":"Tanzhiheng26"},"content":" // Print task that was added and number of tasks remaining","lastModifiedDate":"2024-01-30"},{"lineNumber":116,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(\"\\tGot it. I\u0027ve added this task:\\n\\t %s\\n\", task);","lastModifiedDate":"2024-01-29"},{"lineNumber":117,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(\"\\tNow you have %d tasks in the list.\\n\", this.tasks.size());","lastModifiedDate":"2024-01-30"},{"lineNumber":118,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"Tanzhiheng26"},"content":" // Update tasks in storage","lastModifiedDate":"2024-01-30"},{"lineNumber":120,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":121,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":123,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":124,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":125,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":126,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":127,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":128,"author":{"gitId":"Tanzhiheng26"},"content":" * Marks a task as done at the specified index.","lastModifiedDate":"2024-01-30"},{"lineNumber":129,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":130,"author":{"gitId":"Tanzhiheng26"},"content":" * @param taskIndex The arrayList index of the task to be marked as done.","lastModifiedDate":"2024-01-30"},{"lineNumber":131,"author":{"gitId":"Tanzhiheng26"},"content":" * @param storage The storage to update after marking.","lastModifiedDate":"2024-01-30"},{"lineNumber":132,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":133,"author":{"gitId":"Tanzhiheng26"},"content":" public void mark(int taskIndex, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":134,"author":{"gitId":"Tanzhiheng26"},"content":" // Check for invalid taskIndex","lastModifiedDate":"2024-01-30"},{"lineNumber":135,"author":{"gitId":"Tanzhiheng26"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":136,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid task number\");","lastModifiedDate":"2024-01-29"},{"lineNumber":137,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":138,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":139,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":140,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(taskIndex).isDone \u003d true;","lastModifiedDate":"2024-01-30"},{"lineNumber":141,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":142,"author":{"gitId":"Tanzhiheng26"},"content":" // Print task that was marked","lastModifiedDate":"2024-01-30"},{"lineNumber":143,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tNice! I have marked this task as done:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":144,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":145,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t %s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":146,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(taskIndex));","lastModifiedDate":"2024-01-30"},{"lineNumber":147,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":148,"author":{"gitId":"Tanzhiheng26"},"content":" // Update tasks in storage","lastModifiedDate":"2024-01-30"},{"lineNumber":149,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":150,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":151,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":152,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":153,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":154,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":155,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":156,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":157,"author":{"gitId":"Tanzhiheng26"},"content":" * Marks a task as not done at the specified index.","lastModifiedDate":"2024-01-30"},{"lineNumber":158,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":159,"author":{"gitId":"Tanzhiheng26"},"content":" * @param taskIndex The arrayList index of the task to be marked as not done.","lastModifiedDate":"2024-01-30"},{"lineNumber":160,"author":{"gitId":"Tanzhiheng26"},"content":" * @param storage The storage to update after marking.","lastModifiedDate":"2024-01-30"},{"lineNumber":161,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":162,"author":{"gitId":"Tanzhiheng26"},"content":" public void unmark(int taskIndex, Storage storage) {","lastModifiedDate":"2024-01-29"},{"lineNumber":163,"author":{"gitId":"Tanzhiheng26"},"content":" // Check for invalid taskIndex","lastModifiedDate":"2024-01-30"},{"lineNumber":164,"author":{"gitId":"Tanzhiheng26"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d this.tasks.size()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":165,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tInvalid task number\");","lastModifiedDate":"2024-01-29"},{"lineNumber":166,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-29"},{"lineNumber":167,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":168,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":169,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(taskIndex).isDone \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":170,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":171,"author":{"gitId":"Tanzhiheng26"},"content":" // Print task that was unmarked","lastModifiedDate":"2024-01-30"},{"lineNumber":172,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tOK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-29"},{"lineNumber":173,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-29"},{"lineNumber":174,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t %s\\n\",","lastModifiedDate":"2024-01-29"},{"lineNumber":175,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(taskIndex));","lastModifiedDate":"2024-01-30"},{"lineNumber":176,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":177,"author":{"gitId":"Tanzhiheng26"},"content":" // Update tasks in storage","lastModifiedDate":"2024-01-30"},{"lineNumber":178,"author":{"gitId":"Tanzhiheng26"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":179,"author":{"gitId":"Tanzhiheng26"},"content":" storage.writeToFile(this);","lastModifiedDate":"2024-01-29"},{"lineNumber":180,"author":{"gitId":"Tanzhiheng26"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":181,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tSomething went wrong: \" + e.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":182,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":183,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":184,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":185,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":186,"author":{"gitId":"Tanzhiheng26"},"content":" * Finds tasks in the TaskList that contain the specified keyword in their descriptions.","lastModifiedDate":"2024-01-30"},{"lineNumber":187,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":188,"author":{"gitId":"Tanzhiheng26"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2024-01-30"},{"lineNumber":189,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":190,"author":{"gitId":"Tanzhiheng26"},"content":" public void find(String keyword) {","lastModifiedDate":"2024-01-30"},{"lineNumber":191,"author":{"gitId":"Tanzhiheng26"},"content":" ArrayList\u003cInteger\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":192,"author":{"gitId":"Tanzhiheng26"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2024-01-30"},{"lineNumber":193,"author":{"gitId":"Tanzhiheng26"},"content":" if (this.tasks.get(i).description.contains(keyword)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":194,"author":{"gitId":"Tanzhiheng26"},"content":" matchingTasks.add(i);","lastModifiedDate":"2024-01-30"},{"lineNumber":195,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":196,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":197,"author":{"gitId":"Tanzhiheng26"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":198,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tThere are no matching tasks in your list:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":199,"author":{"gitId":"Tanzhiheng26"},"content":" return;","lastModifiedDate":"2024-01-30"},{"lineNumber":200,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":201,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tHere are the matching tasks in your list:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":202,"author":{"gitId":"Tanzhiheng26"},"content":" for (Integer i : matchingTasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":203,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.printf(","lastModifiedDate":"2024-01-30"},{"lineNumber":204,"author":{"gitId":"Tanzhiheng26"},"content":" \"\\t%d.%s\\n\",","lastModifiedDate":"2024-01-30"},{"lineNumber":205,"author":{"gitId":"Tanzhiheng26"},"content":" i + 1,","lastModifiedDate":"2024-01-30"},{"lineNumber":206,"author":{"gitId":"Tanzhiheng26"},"content":" this.tasks.get(i));","lastModifiedDate":"2024-01-30"},{"lineNumber":207,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":208,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":209,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":210,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":210}},{"path":"src/main/java/ezra/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" * Represents a simple to-do task without a specific deadline or start/end time.","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class ToDo extends Task {","lastModifiedDate":"2024-01-20"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs a ToDo object with the specified description.","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" * @param description The description of the to-do task.","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" public ToDo(String description) {","lastModifiedDate":"2024-01-20"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" super(description);","lastModifiedDate":"2024-01-20"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-20"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the ToDo object to display to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string including task type, status, and description.","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-20"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString() {","lastModifiedDate":"2024-01-20"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"[T][%s] %s\", this.getStatusIcon(), this.description);","lastModifiedDate":"2024-01-20"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-20"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" * Returns a formatted string representation of the ToDo object for storage purposes.","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" * @return A formatted string suitable for storage, including task type, status, and description.","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" public String toString2() {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" return String.format(\"T | %d | %s\", this.isDone ? 1 : 0, this.description);","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":" * Checks if this ToDo object is equal to another object.","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Tanzhiheng26"},"content":" * @param o The object to compare to.","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Tanzhiheng26"},"content":" * @return True if the objects are equal, false otherwise.","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Tanzhiheng26"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Tanzhiheng26"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Tanzhiheng26"},"content":" if (o \u003d\u003d this) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Tanzhiheng26"},"content":" return true;","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Tanzhiheng26"},"content":" if (!(o instanceof ToDo)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"Tanzhiheng26"},"content":" return false;","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Tanzhiheng26"},"content":" ToDo t \u003d (ToDo) o;","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Tanzhiheng26"},"content":" return this.description.equals(t.description);","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-20"}],"authorContributionMap":{"Tanzhiheng26":53}},{"path":"src/main/java/ezra/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" * Represents the user interface for the Ezra task management application.","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class Ui {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" * Prints a horizontal line to the console.","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" public static void horizontalLine() {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\t____________________________________________________________\");","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" public void greet() {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" System.out.println(\"\\tHello! I\u0027m Ezra.\\n\\tWhat can I do for you?\");","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" Ui.horizontalLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":23}},{"path":"src/main/java/ezra/WrongFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"/**","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":" * Exception thrown when there is an incorrect format in user input commands.","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class WrongFormatException extends Exception {","lastModifiedDate":"2024-01-21"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" * Constructs a WrongFormatException with the specified error message.","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" *","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" * @param message The error message describing the incorrect format.","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" public WrongFormatException(String message) {","lastModifiedDate":"2024-01-21"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" super(message);","lastModifiedDate":"2024-01-21"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-21"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-21"}],"authorContributionMap":{"Tanzhiheng26":16}},{"path":"src/test/java/ezra/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"public class DeadlineTest {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" public void testToString() {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline1 \u003d new Deadline(\"Return book\", \"29/01/2024 1800\");","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString1 \u003d \"[D][ ] Return book (by: 29 Jan 2024 06:00 pm)\";","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString1, deadline1.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline2 \u003d new Deadline(\"Finish assignment\", \"01/02/2024 0000\");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString2 \u003d \"[D][ ] Finish assignment (by: 01 Feb 2024 12:00 am)\";","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString2, deadline2.toString());","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" public void testToString2() {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline1 \u003d new Deadline(\"Return book\", \"29/01/2024 1800\");","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString1 \u003d \"D | 0 | Return book | 29/01/2024 1800\";","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString1, deadline1.toString2());","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" Deadline deadline2 \u003d new Deadline(\"Finish assignment\", \"01/02/2024 0000\");","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" String expectedString2 \u003d \"D | 0 | Finish assignment | 01/02/2024 0000\";","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(expectedString2, deadline2.toString2());","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":28}},{"path":"src/test/java/ezra/TestParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"package ezra;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Tanzhiheng26"},"content":"public class TestParser {","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Tanzhiheng26"},"content":" public void TestParseDeadline() throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline /by 29/01/24 1800\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books /by\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books by 29/01/24 1800\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(new Deadline(\"return books\", \"29/01/2024 1800\"),","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDeadline(\"deadline return books /by 29/01/2024 1800\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Tanzhiheng26"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Tanzhiheng26"},"content":" @Test","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Tanzhiheng26"},"content":" public void TestParseDelete() throws WrongFormatException {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(0, Parser.parseDelete(\"delete 1\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Tanzhiheng26"},"content":" assertEquals(9, Parser.parseDelete(\"delete 10\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete -1\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete abc\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete 12a\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Tanzhiheng26"},"content":" assertThrows(WrongFormatException.class, () -\u003e","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Tanzhiheng26"},"content":" Parser.parseDelete(\"delete \"));","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Tanzhiheng26"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Tanzhiheng26"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Tanzhiheng26":37}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tanzhiheng26"},"content":"list","lastModifiedDate":"2024-01-21"},{"lineNumber":2,"author":{"gitId":"Tanzhiheng26"},"content":"todo borrow book","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Tanzhiheng26"},"content":"mark 1","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Tanzhiheng26"},"content":"unmark 1","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Tanzhiheng26"},"content":"delete 1","lastModifiedDate":"2024-01-21"},{"lineNumber":6,"author":{"gitId":"Tanzhiheng26"},"content":"bye","lastModifiedDate":"2024-01-21"}],"authorContributionMap":{"Tanzhiheng26":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":"Tanzhiheng26"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\ezra\\*.java","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Tanzhiheng26"},"content":"java -classpath ..\\bin ezra.Ezra \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"Tanzhiheng26":2,"-":19}}] diff --git a/Tanzhiheng26_ip_master/commits.json b/Tanzhiheng26_ip_master/commits.json index 7b72eab9..98095eec 100644 --- a/Tanzhiheng26_ip_master/commits.json +++ b/Tanzhiheng26_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Tanzhiheng26":[{"date":"2024-01-20","commitResults":[{"hash":"0a7fd4ad0511ebba0b8beeeb704946938e7fb8e9","isMergeCommit":false,"messageTitle":"Rename chatbot to Ezra, print greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"207a08442e24709ecdc83bf1934538816cda2fb0","isMergeCommit":false,"messageTitle":"Echo user input until user enters \"bye\", add indentation to chatbot messages","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"e721b45e95f4e41deac2359b452c6982eda53462","isMergeCommit":false,"messageTitle":"Store user input in tasks ArrayList and display previous inputs when user enters \"list\"","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"63a9ef05d0642e84dfc67eb14ca5188e2982a859","isMergeCommit":false,"messageTitle":"Add Task class, allow tasks to be marked as done or not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":18}}},{"hash":"7bab8dfcaf871b612e42281e3919b2a78faa0fd8","isMergeCommit":false,"messageTitle":"Change static fields and methods to non-static.","messageBody":"This allows each instance of the chatbot to have its own task list.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":17}}},{"hash":"18d93da79154527fe58e55bb41b8587b60cad0af","isMergeCommit":false,"messageTitle":"Add ToDo class and handle todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"394541aa2284f31cbc7eef42bf28acc8d8cc786f","isMergeCommit":false,"messageTitle":"Add Deadline class and handle deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2024-01-21","commitResults":[{"hash":"957f0634def85ea70bae3735c66fd1d1b2efaa59","isMergeCommit":false,"messageTitle":"Add Event class and handle event command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"b7b295207310b0c3bb3e43ce385f0252000db912","isMergeCommit":false,"messageTitle":"Test UI","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":7,"deletions":4}}},{"hash":"c3d3ba86f9fb22a07567bcb96cbb94912d1db839","isMergeCommit":false,"messageTitle":"Handle commands with incorrect format using custom WrongFormatException class","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":32}}},{"hash":"d0dce1ac2d9647a44ea1884f216a2979f6e61405","isMergeCommit":false,"messageTitle":"Add delete command to remove tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"5ffe57a80cec5a12ba70eb30ed386a4b6cb28524","isMergeCommit":false,"messageTitle":"Add test for delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}}]},{"date":"2024-01-27","commitResults":[{"hash":"4974ca3276fc1f6c10cca2ae347035571036704c","isMergeCommit":false,"messageTitle":"Write tasks to ./data/ezra.txt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"c6e783feb8a9f9869b0342f1c88306f67f539906","isMergeCommit":false,"messageTitle":"Load tasks from ./data/ezra.txt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"4d108c93c59a33f76b9b8f2d248b1c345fd7f51f","isMergeCommit":false,"messageTitle":"Create data folder if it does not exist","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":0}}},{"hash":"2ad13177ea8210e47bbfecd02c64c9a15b534783","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2024-01-28","commitResults":[{"hash":"0fc3d58a4639126df43f6e960cde65bf5a595f63","isMergeCommit":false,"messageTitle":"Store date as LocalDate in Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"51f383e9ed5f38c21cf101ec0b37021758ceaff9","isMergeCommit":false,"messageTitle":"Store date as LocalDate in Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"acfaff3c18410b623fb0587f739b6547b7f8b013","isMergeCommit":false,"messageTitle":"Store date and time as LocalDateTime in Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":29,"deletions":19}}},{"hash":"3145327be94698661c6a591f4b460d2992246c67","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2024-01-29","commitResults":[{"hash":"e787990088c93024f2165263427d767eaaa70856","isMergeCommit":false,"messageTitle":"Create Ui, Storage, Parser, TaskList class and refactor Duke.java","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":286,"deletions":244}}},{"hash":"23e86d8ef45bbf3f6be88380b42bcee4fa23f1b9","isMergeCommit":false,"messageTitle":"Put all classes in src.main.java.ezra package","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":22,"deletions":4},"bat":{"insertions":1,"deletions":1}}},{"hash":"2e56fab5727be43464c54365de15790ec9fa33b3","isMergeCommit":false,"messageTitle":"Put all classes in ezra package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"fb21bd3792224b79d3914bf7d9a0ac2715ff9115","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Tanzhiheng26/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"be4a47dfe4ee84eee41d82c31ca222d6d450f040","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":22}}},{"hash":"c855e3a37fb9b2f602216644ccf42a05f33ee123","isMergeCommit":false,"messageTitle":"Add equals method to Event, Deadline and ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"9ae345d1fcdcf4b8a9b317d397c2ab06718b8200","isMergeCommit":false,"messageTitle":"Add test case to TestParseDeadline","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Tanzhiheng26":{"java":522,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":15}},"authorContributionVariance":{"Tanzhiheng26":43933.17},"authorDisplayNameMap":{"Tanzhiheng26":"CS2103T-W09-3 TAN ..HENG"}} +{"authorDailyContributionsMap":{"Tanzhiheng26":[{"date":"2024-01-20","commitResults":[{"hash":"0a7fd4ad0511ebba0b8beeeb704946938e7fb8e9","isMergeCommit":false,"messageTitle":"Rename chatbot to Ezra, print greeting and exit messages","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"207a08442e24709ecdc83bf1934538816cda2fb0","isMergeCommit":false,"messageTitle":"Echo user input until user enters \"bye\", add indentation to chatbot messages","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":3}}},{"hash":"e721b45e95f4e41deac2359b452c6982eda53462","isMergeCommit":false,"messageTitle":"Store user input in tasks ArrayList and display previous inputs when user enters \"list\"","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":3}}},{"hash":"63a9ef05d0642e84dfc67eb14ca5188e2982a859","isMergeCommit":false,"messageTitle":"Add Task class, allow tasks to be marked as done or not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":18}}},{"hash":"7bab8dfcaf871b612e42281e3919b2a78faa0fd8","isMergeCommit":false,"messageTitle":"Change static fields and methods to non-static.","messageBody":"This allows each instance of the chatbot to have its own task list.\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":17}}},{"hash":"18d93da79154527fe58e55bb41b8587b60cad0af","isMergeCommit":false,"messageTitle":"Add ToDo class and handle todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":5}}},{"hash":"394541aa2284f31cbc7eef42bf28acc8d8cc786f","isMergeCommit":false,"messageTitle":"Add Deadline class and handle deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2024-01-21","commitResults":[{"hash":"957f0634def85ea70bae3735c66fd1d1b2efaa59","isMergeCommit":false,"messageTitle":"Add Event class and handle event command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"b7b295207310b0c3bb3e43ce385f0252000db912","isMergeCommit":false,"messageTitle":"Test UI","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":7,"deletions":4}}},{"hash":"c3d3ba86f9fb22a07567bcb96cbb94912d1db839","isMergeCommit":false,"messageTitle":"Handle commands with incorrect format using custom WrongFormatException class","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":32}}},{"hash":"d0dce1ac2d9647a44ea1884f216a2979f6e61405","isMergeCommit":false,"messageTitle":"Add delete command to remove tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"5ffe57a80cec5a12ba70eb30ed386a4b6cb28524","isMergeCommit":false,"messageTitle":"Add test for delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}}]},{"date":"2024-01-27","commitResults":[{"hash":"4974ca3276fc1f6c10cca2ae347035571036704c","isMergeCommit":false,"messageTitle":"Write tasks to ./data/ezra.txt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"c6e783feb8a9f9869b0342f1c88306f67f539906","isMergeCommit":false,"messageTitle":"Load tasks from ./data/ezra.txt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"4d108c93c59a33f76b9b8f2d248b1c345fd7f51f","isMergeCommit":false,"messageTitle":"Create data folder if it does not exist","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":0}}},{"hash":"2ad13177ea8210e47bbfecd02c64c9a15b534783","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2024-01-28","commitResults":[{"hash":"0fc3d58a4639126df43f6e960cde65bf5a595f63","isMergeCommit":false,"messageTitle":"Store date as LocalDate in Deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"51f383e9ed5f38c21cf101ec0b37021758ceaff9","isMergeCommit":false,"messageTitle":"Store date as LocalDate in Event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":7}}},{"hash":"acfaff3c18410b623fb0587f739b6547b7f8b013","isMergeCommit":false,"messageTitle":"Store date and time as LocalDateTime in Deadline and Event","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":29,"deletions":19}}},{"hash":"3145327be94698661c6a591f4b460d2992246c67","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2024-01-29","commitResults":[{"hash":"e787990088c93024f2165263427d767eaaa70856","isMergeCommit":false,"messageTitle":"Create Ui, Storage, Parser, TaskList class and refactor Duke.java","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":286,"deletions":244}}},{"hash":"23e86d8ef45bbf3f6be88380b42bcee4fa23f1b9","isMergeCommit":false,"messageTitle":"Put all classes in src.main.java.ezra package","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":22,"deletions":4},"bat":{"insertions":1,"deletions":1}}},{"hash":"2e56fab5727be43464c54365de15790ec9fa33b3","isMergeCommit":false,"messageTitle":"Put all classes in ezra package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}},{"hash":"fb21bd3792224b79d3914bf7d9a0ac2715ff9115","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Tanzhiheng26/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"be4a47dfe4ee84eee41d82c31ca222d6d450f040","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":85,"deletions":22}}},{"hash":"c855e3a37fb9b2f602216644ccf42a05f33ee123","isMergeCommit":false,"messageTitle":"Add equals method to Event, Deadline and ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"9ae345d1fcdcf4b8a9b317d397c2ab06718b8200","isMergeCommit":false,"messageTitle":"Add test case to TestParseDeadline","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2024-01-30","commitResults":[{"hash":"1ba8eae082b180cdcf7a2344998e91892f185aeb","isMergeCommit":false,"messageTitle":"Update build.gradle to create JAR files","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":7,"deletions":5}}},{"hash":"226e28773cecd47535c4fa60c955b5cb16266a80","isMergeCommit":false,"messageTitle":"Update filepath of Ezra in runtest.bat","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":9},"bat":{"insertions":2,"deletions":2}}},{"hash":"45d4016d70479e443348976ee9c2f57af6af97d7","isMergeCommit":false,"messageTitle":"Add javadoc comments to Task and its subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":0}}},{"hash":"cb703c387822d915f23ea4cba532aa87e03ba2e9","isMergeCommit":false,"messageTitle":"Add javadoc comments all classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":1}}},{"hash":"34411c170eca4b1646380d2cb87565e162976178","isMergeCommit":false,"messageTitle":"Follow Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":47}}},{"hash":"86d81556b73dbc3001db862fa41685c7c34574c1","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"0717dcb0e4feb031a6112bcbe7db727a806cf50c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"98d4f9d9e680aa26fe8c7f229d7db0d209b6f3d7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/ezra/Storage.java\n#\tsrc/main/java/ezra/TaskList.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"0385c4e0193663badea2276c77bc1ed68ac15c4d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"a78cfca1eafa03f75e56ad903baadcdaa64e2229","isMergeCommit":false,"messageTitle":"Add javadoc comments for find and parseFind","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"Tanzhiheng26":{"java":844,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":3,"txt":9}},"authorContributionVariance":{"Tanzhiheng26":48586.246},"authorDisplayNameMap":{"Tanzhiheng26":"CS2103T-W09-3 TAN ..HENG"}} diff --git a/Yskie_ip_master/authorship.json b/Yskie_ip_master/authorship.json index 38b475ff..c6bdf71a 100644 --- a/Yskie_ip_master/authorship.json +++ b/Yskie_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"E | 1 | 19 | 1 | gf","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":1}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":" protected LocalDateTime endDatetime;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" public Deadline(String name, String endDatetime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" this.endDatetime \u003d datetimeParser(endDatetime);","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" public Deadline(String name, boolean isDone, String endDatetime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" super(name, isDone);","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" this.endDatetime \u003d datetimeParser(endDatetime);","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" public LocalDateTime datetimeParser(String date) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" String[] dateTimeSplit \u003d date.split(\" \");","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" int year \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" int month \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" int day \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" int hour \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" int minute \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" String errorMsg \u003d \"Please ensure that you are using the format deadline \u003cdescription\u003e /by yyyy-MM-dd \u003ctime\u003e. eg. deadline assignment /by 2024-01-29 1835\";","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" //Date","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" String[] dateSplit \u003d dateTimeSplit[0].split(\"-\");","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" year \u003d Integer.parseInt(dateSplit[0]);","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" month \u003d Integer.parseInt(dateSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" day \u003d Integer.parseInt(dateSplit[2]);","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" //Time","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" if (dateTimeSplit[1].length() \u003d\u003d 4) {","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" try { ","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" int time \u003d Integer.parseInt(dateTimeSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" if (time \u003e\u003d 2400 || time \u003c 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Please choose a time from 0000 to 2359!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" String[] hourMinuteSplit \u003d dateTimeSplit[1].split(\"\");","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" hour \u003d Integer.parseInt(hourMinuteSplit[0] + hourMinuteSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" minute \u003d Integer.parseInt(hourMinuteSplit[2] + hourMinuteSplit[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" //Combine","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" return LocalDateTime.of(year, month, day, hour, minute);","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":" public String endDatetimeFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" return endDatetime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":" public String endDatetimeSaveFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" return endDatetime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Yskie"},"content":" return \"D\" + super.toSave() + \" | \" + endDatetimeSaveFormat();","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":74,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":75,"author":{"gitId":"Yskie"},"content":" return \"[D]\" + super.toString() + \" (by: \" + endDatetimeFormat() + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":77,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":78}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"import java.time.LocalTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" protected LocalDateTime startDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" protected LocalTime endDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" public Event(String name, String startDateTime, String endDateTime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" this.startDateTime \u003d startDatetimeParser(startDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" this.endDateTime \u003d endDatetimeParser(endDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" public Event(String name, boolean isDone, String startDateTime, String endDateTime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" super(name, isDone);","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" this.startDateTime \u003d startDatetimeParser(startDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" this.endDateTime \u003d endDatetimeParser(endDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" public LocalDateTime startDatetimeParser(String date) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" String[] dateTimeSplit \u003d date.split(\" \");","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" int year \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" int month \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" int day \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" int hour \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" int minute \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" String errorMsg \u003d \"Please ensure that you are using the format event \u003cdescription\u003e /from yyyy-MM-dd \u003ctime\u003e /to \u003cend date\u003e. \"","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" + \"eg. event meeting /from 2024-01-29 1835 /to 2035\";","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" // Date","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" String[] dateSplit \u003d dateTimeSplit[0].split(\"-\");","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" year \u003d Integer.parseInt(dateSplit[0]);","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" month \u003d Integer.parseInt(dateSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" day \u003d Integer.parseInt(dateSplit[2]);","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" // Time","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" if (dateTimeSplit[1].length() \u003d\u003d 4) {","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" int time \u003d Integer.parseInt(dateTimeSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" if (time \u003e\u003d 2400 || time \u003c 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Please choose a time from 0000 to 2359!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" String[] hourMinuteSplit \u003d dateTimeSplit[1].split(\"\");","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" hour \u003d Integer.parseInt(hourMinuteSplit[0] + hourMinuteSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" minute \u003d Integer.parseInt(hourMinuteSplit[2] + hourMinuteSplit[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" // Combine","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":" return LocalDateTime.of(year, month, day, hour, minute);","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":" public LocalTime endDatetimeParser(String timeStr) throws TinyException { ","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" String errorMsg \u003d \"Please ensure that you are using the format event \u003cdescription\u003e /from yyyy-MM-dd \u003ctime\u003e /to \u003cend date\u003e. \"","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":" + \"eg. event meeting /from 2024-01-29 1835 /to 2035\";","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":" int time \u003d Integer.parseInt(timeStr);","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Yskie"},"content":" if (time \u003e\u003d 2400 || time \u003c 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Please choose your end time from 0000 to 2359!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"Yskie"},"content":" String[] hourMinuteSplit \u003d timeStr.split(\"\");","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"Yskie"},"content":" int hour \u003d Integer.parseInt(hourMinuteSplit[0] + hourMinuteSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"Yskie"},"content":" int minute \u003d Integer.parseInt(hourMinuteSplit[2] + hourMinuteSplit[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"Yskie"},"content":" return LocalTime.of(hour, minute);","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Yskie"},"content":" public String startDatetimeFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"Yskie"},"content":" return startDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"Yskie"},"content":" public String endDatetimeFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"Yskie"},"content":" return endDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"Yskie"},"content":" public String startDatetimeSaveFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":94,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"Yskie"},"content":" return startDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"Yskie"},"content":" public String endDatetimeSaveFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"Yskie"},"content":" return endDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":101,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Yskie"},"content":" return \"E\" + super.toSave() + \" | \" + startDatetimeSaveFormat() + \" | \" + endDatetimeSaveFormat();","lastModifiedDate":"2024-01-30"},{"lineNumber":106,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":108,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":109,"author":{"gitId":"Yskie"},"content":" return \"[E]\" + super.toString() + \" (from: \" + startDatetimeFormat() + \" to: \" + endDatetimeFormat() + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":111,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":111}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"public class Parser {","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":" protected boolean terminate \u003d false;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":" protected String input;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" protected TaskList taskList;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" public String parse(String input, TaskList taskList) throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" this.input \u003d input;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" return taskList.list();","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"mark\", 4)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" return mark();","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"unmark\", 6)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" return unmark();","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"todo\", 4)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" return todo();","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"deadline\", 8)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" return deadline();","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"event\", 5)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" return event();","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"delete\", 6)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" return delete(); ","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" terminate \u003d true;","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" return bye();","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" return cmdUnknown();","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" throw e;","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" return terminate;","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" public String mark() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" if (s.length !\u003d 2 || !s[0].equals(\"mark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"mark \u003cnumber\u003e\\\" to change the status to done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" int ind \u003d Integer.parseInt(s[1]);","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" taskList.get(ind - 1).taskDone();","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + taskList.get(ind - 1);","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"mark \u003cnumber\u003e\\\" to change the status to done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" return \"OOPS! Please type a valid number! Type \\\"list\\\" to check the lists of tasks.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":" public String unmark() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":" if (s.length !\u003d 2 || !s[0].equals(\"unmark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"unmark \u003cnumber\u003e\\\" to change the status not done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":" int ind \u003d Integer.parseInt(s[1]);","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" taskList.get(ind - 1).taskUndone();","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n \" + taskList.get(ind - 1);","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"unmark \u003cnumber\u003e\\\" to change the status to not done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Yskie"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Yskie"},"content":" return \"OOPS! Please type a valid number! Type \\\"list\\\" to check the lists of tasks.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Yskie"},"content":" public String todo() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Yskie"},"content":" String name \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Yskie"},"content":" String[] st \u003d input.split(\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Yskie"},"content":" if (!s[0].equals(\"todo\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"todo \u003cdescription\u003e\\\" to create a new todo!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 5; i \u003c st.length; i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Yskie"},"content":" name +\u003d st[i];","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Yskie"},"content":" if (name \u003d\u003d \"\") {","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Yskie"},"content":" return \"OOPS! The description of a todo cannot be empty.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Yskie"},"content":" taskList.add(new Todo(name));","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Yskie"},"content":" return \"Got it. I\u0027ve added this task:\\n \" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Yskie"},"content":" + \"\\n Now you have \" + taskList.size() + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"todo \u003cdescription\u003e\\\" to create a new todo!\";","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Yskie"},"content":" public String deadline() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":105,"author":{"gitId":"Yskie"},"content":" String name \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Yskie"},"content":" String[] st \u003d input.split(\"/by \");","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":108,"author":{"gitId":"Yskie"},"content":" if (!s[0].equals(\"deadline\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":109,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"deadline \u003cdescription\u003e /by \u003cyyyy-mm-dd\u003e \u003ctime\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":111,"author":{"gitId":"Yskie"},"content":" name \u003d st[0].substring(9);","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"Yskie"},"content":" taskList.add(new Deadline(name.trim(), st[1]));","lastModifiedDate":"2024-01-29"},{"lineNumber":113,"author":{"gitId":"Yskie"},"content":" // printAdd(tasks.get(tasks.size() - 1).toString(), tasks.size());","lastModifiedDate":"2024-01-29"},{"lineNumber":114,"author":{"gitId":"Yskie"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + \" \" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2024-01-29"},{"lineNumber":115,"author":{"gitId":"Yskie"},"content":" + \"\\n Now you have \" + taskList.size() + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":116,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":117,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":118,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"deadline \u003cdescription\u003e /by \u003cyyyy-mm-dd\u003e \u003ctime\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":120,"author":{"gitId":"Yskie"},"content":" throw e;","lastModifiedDate":"2024-01-30"},{"lineNumber":121,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":123,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":124,"author":{"gitId":"Yskie"},"content":" public String event() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":125,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":126,"author":{"gitId":"Yskie"},"content":" String name \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":127,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":128,"author":{"gitId":"Yskie"},"content":" if (!s[0].equals(\"event\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":129,"author":{"gitId":"Yskie"},"content":" System.out.println(\"YES\");","lastModifiedDate":"2024-01-29"},{"lineNumber":130,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"event \u003cdescription\u003e /from \u003cstart date\u003e /to \u003cend date\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":131,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":132,"author":{"gitId":"Yskie"},"content":" String[] from \u003d input.split(\"/from \");","lastModifiedDate":"2024-01-29"},{"lineNumber":133,"author":{"gitId":"Yskie"},"content":" String[] fromTo \u003d from[1].split(\"/to \");","lastModifiedDate":"2024-01-29"},{"lineNumber":134,"author":{"gitId":"Yskie"},"content":" name \u003d from[0].substring(5);","lastModifiedDate":"2024-01-29"},{"lineNumber":135,"author":{"gitId":"Yskie"},"content":" taskList.add(new Event(name.trim(), fromTo[0].trim(), fromTo[1].trim()));","lastModifiedDate":"2024-01-29"},{"lineNumber":136,"author":{"gitId":"Yskie"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + \" \" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2024-01-29"},{"lineNumber":137,"author":{"gitId":"Yskie"},"content":" + \"\\n Now you have \" + taskList.size() + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":138,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":139,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":140,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"event \u003cdescription\u003e /from \u003cstart date\u003e /to \u003cend date\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":141,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":142,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":143,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":144,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":145,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":146,"author":{"gitId":"Yskie"},"content":" public String delete() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":147,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":148,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":149,"author":{"gitId":"Yskie"},"content":" if (s.length !\u003d 2 || !s[0].equals(\"delete\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":150,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"delete \u003cnumber\u003e\\\" to delete the task!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":151,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":152,"author":{"gitId":"Yskie"},"content":" int ind \u003d Integer.parseInt(s[1]); ","lastModifiedDate":"2024-01-29"},{"lineNumber":153,"author":{"gitId":"Yskie"},"content":" String output \u003d \"Noted. I\u0027ve removed this task:\" + ","lastModifiedDate":"2024-01-29"},{"lineNumber":154,"author":{"gitId":"Yskie"},"content":" \"\\n \" + taskList.get(ind - 1).toString() + ","lastModifiedDate":"2024-01-29"},{"lineNumber":155,"author":{"gitId":"Yskie"},"content":" \"\\n Now you have \" + (taskList.size() - 1) + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":156,"author":{"gitId":"Yskie"},"content":" taskList.delete(ind - 1);","lastModifiedDate":"2024-01-29"},{"lineNumber":157,"author":{"gitId":"Yskie"},"content":" return output;","lastModifiedDate":"2024-01-29"},{"lineNumber":158,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":159,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":160,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"delete \u003cnumber\u003e\\\" to delete the task!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":161,"author":{"gitId":"Yskie"},"content":" } catch (NullPointerException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":162,"author":{"gitId":"Yskie"},"content":" return ","lastModifiedDate":"2024-01-29"},{"lineNumber":163,"author":{"gitId":"Yskie"},"content":" \"OOPS! Please type a valid number! Type \\\"list\\\" to check the lists of tasks.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":164,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":165,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":166,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":167,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":168,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":169,"author":{"gitId":"Yskie"},"content":" public String bye() {","lastModifiedDate":"2024-01-29"},{"lineNumber":170,"author":{"gitId":"Yskie"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":171,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":172,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":173,"author":{"gitId":"Yskie"},"content":" public String cmdUnknown() {","lastModifiedDate":"2024-01-29"},{"lineNumber":174,"author":{"gitId":"Yskie"},"content":" return \"I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2024-01-29"},{"lineNumber":175,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":176,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":177,"author":{"gitId":"Yskie"},"content":" public static boolean checkCmd(String input, String name, int len) {","lastModifiedDate":"2024-01-29"},{"lineNumber":178,"author":{"gitId":"Yskie"},"content":" return input.length() \u003e\u003d len \u0026\u0026 input.substring(0, len).equals(name);","lastModifiedDate":"2024-01-29"},{"lineNumber":179,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":180,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":180}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"public class Storage {","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" protected String filePath;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" // Returns a string of message to be parsed.","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" public ArrayList\u003cString\u003e load() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" //Creating the folder if it does not exists","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" if (!new File(\"../../../data\").exists()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" new File(\"../../../data\").mkdirs(); ","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" ArrayList\u003cString\u003e dataFromFile \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" dataFromFile.add(data);","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" sc.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" return dataFromFile;","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" public void save(ArrayList\u003cString\u003e tasksToSave) {","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" new FileWriter(filePath).close();","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" FileWriter myWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c tasksToSave.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" myWriter.write(tasksToSave.get(i) + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" myWriter.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" System.out.println(\"An error occurred when saving.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":52}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":" protected String name;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" protected String type \u003d \" \";","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" //add","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" public String getName() {","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" return this.name;","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" public String getTypeIcon() {","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" return this.type;","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" return (this.isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-24"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" public void taskDone() {","lastModifiedDate":"2024-01-25"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-25"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" public void taskUndone() {","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-25"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" return \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + name;","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" return \"[\" + getStatusIcon() + \"] \" + getName();","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Yskie":46}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"public class TaskList {","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" protected ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" public TaskList(ArrayList\u003cString\u003e data) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" // Parse the data here.","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c data.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" String[] entry \u003d data.get(i).split(\" \\\\| \");","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" if (entry[0].equals(\"T\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" Todo todo \u003d new Todo(entry[2], entry[1].equals(\"0\") ? false : true);","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" tasks.add(todo);","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" } else if (entry[0].equals(\"D\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" Deadline deadline \u003d new Deadline(entry[2], entry[1].equals(\"0\") ? false : true, entry[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" tasks.add(deadline);","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" } else if (entry[0].equals(\"E\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" Event event \u003d new Event(entry[2], entry[1].equals(\"0\") ? false : true, entry[3], entry[4]);","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" tasks.add(event);","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" public void add(Task task) {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" public void delete(Integer ind) {","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" tasks.remove(tasks.get(ind));","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" public Task get(Integer ind) {","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" return tasks.get(ind);","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" public String list() {","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" return \"You don\u0027t have any tasks!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" String output \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" output +\u003d (i + 1) + \".\" + tasks.get(i);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" output +\u003d \"\\n \";","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" return output;","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" public Integer size() {","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" return tasks.size();","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" public ArrayList\u003cString\u003e toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" ArrayList\u003cString\u003e tasksToSave \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" tasksToSave.add(tasks.get(i).toSave());","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" return tasksToSave;","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":60}},{"path":"src/main/java/Tiny.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"public class Tiny {","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" private Storage storage;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" private Ui ui;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" public Tiny(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" ui \u003d new Ui();","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" public void run() throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" ui.start();","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" BufferedReader br \u003d new BufferedReader(new InputStreamReader(System.in));","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" while (!isExit) {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" String input \u003d br.readLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" printContent(parser.parse(input, tasks));","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" storage.save(tasks.toSave());","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" isExit \u003d parser.isExit();","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" new Tiny(\"../../../data/tasks.txt\").run();","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" // Printing Methods","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" public static void tabPrint(String input) {","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" System.out.println(\" \" + input);","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" public static void printLine() {","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" tabPrint(\"____________________________________________________________\\n\");","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" public static void printContent(String input) {","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" printLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" tabPrint(input);","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" printLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Yskie":56}},{"path":"src/main/java/TinyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"public class TinyException extends Exception {","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":" public TinyException(String message) {","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":" super(message);","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":5}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":" public Todo(String name) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" public Todo(String name, boolean isDone) {","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" super(name, isDone);","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" return \"T\" + super.toSave();","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":20}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"public class Ui {","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":" public void start() {","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":" System.out.println(\" Hello! I\u0027m Tiny!\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" \" What can I do for you?\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" System.out.println(\"Error loading the data!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" public void showError(String message) {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"list","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"bye","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":4}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":"java -classpath ../bin Tiny \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"Yskie":1,"-":37}}] +[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"E | 1 | 19 | 1 | gf","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":1}},{"path":"src/main/java/tiny/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import tiny.exceptions.TinyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Deadline;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Event;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Todo;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"public class Parser {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" protected boolean terminate \u003d false;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" protected String input;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" protected TaskList taskList;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" public String parse(String input, TaskList taskList) throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" this.input \u003d input;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" return taskList.list();","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"mark\", 4)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" return mark();","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"unmark\", 6)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" return unmark();","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"todo\", 4)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" return todo();","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"deadline\", 8)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" return deadline();","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"event\", 5)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" return event();","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" } else if (checkCmd(input, \"delete\", 6)) {","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" return delete(); ","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" terminate \u003d true;","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" return bye();","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" return cmdUnknown();","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" throw e;","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" public boolean isExit() {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" return terminate;","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" public String mark() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" if (s.length !\u003d 2 || !s[0].equals(\"mark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"mark \u003cnumber\u003e\\\" to change the status to done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" int ind \u003d Integer.parseInt(s[1]);","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" taskList.get(ind - 1).taskDone();","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + taskList.get(ind - 1);","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"mark \u003cnumber\u003e\\\" to change the status to done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":" return \"OOPS! Please type a valid number! Type \\\"list\\\" to check the lists of tasks.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" public String unmark() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":" if (s.length !\u003d 2 || !s[0].equals(\"unmark\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":70,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"unmark \u003cnumber\u003e\\\" to change the status not done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Yskie"},"content":" int ind \u003d Integer.parseInt(s[1]);","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Yskie"},"content":" taskList.get(ind - 1).taskUndone();","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Yskie"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n \" + taskList.get(ind - 1);","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"unmark \u003cnumber\u003e\\\" to change the status to not done!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Yskie"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"Yskie"},"content":" return \"OOPS! Please type a valid number! Type \\\"list\\\" to check the lists of tasks.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":82,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":83,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":84,"author":{"gitId":"Yskie"},"content":" public String todo() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":85,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":86,"author":{"gitId":"Yskie"},"content":" String name \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":87,"author":{"gitId":"Yskie"},"content":" String[] st \u003d input.split(\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":88,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":89,"author":{"gitId":"Yskie"},"content":" if (!s[0].equals(\"todo\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":90,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"todo \u003cdescription\u003e\\\" to create a new todo!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":91,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":92,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 5; i \u003c st.length; i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":93,"author":{"gitId":"Yskie"},"content":" name +\u003d st[i];","lastModifiedDate":"2024-01-29"},{"lineNumber":94,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":95,"author":{"gitId":"Yskie"},"content":" if (name \u003d\u003d \"\") {","lastModifiedDate":"2024-01-29"},{"lineNumber":96,"author":{"gitId":"Yskie"},"content":" return \"OOPS! The description of a todo cannot be empty.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":97,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":98,"author":{"gitId":"Yskie"},"content":" taskList.add(new Todo(name));","lastModifiedDate":"2024-01-29"},{"lineNumber":99,"author":{"gitId":"Yskie"},"content":" return \"Got it. I\u0027ve added this task:\\n \" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2024-01-29"},{"lineNumber":100,"author":{"gitId":"Yskie"},"content":" + \"\\n Now you have \" + taskList.size() + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":101,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":102,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":103,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":104,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"todo \u003cdescription\u003e\\\" to create a new todo!\";","lastModifiedDate":"2024-01-30"},{"lineNumber":105,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":108,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":109,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":110,"author":{"gitId":"Yskie"},"content":" public String deadline() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":111,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":112,"author":{"gitId":"Yskie"},"content":" String name \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":113,"author":{"gitId":"Yskie"},"content":" String[] st \u003d input.split(\"/by \");","lastModifiedDate":"2024-01-29"},{"lineNumber":114,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":115,"author":{"gitId":"Yskie"},"content":" if (!s[0].equals(\"deadline\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":116,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"deadline \u003cdescription\u003e /by \u003cyyyy-mm-dd\u003e \u003ctime\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-30"},{"lineNumber":117,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":118,"author":{"gitId":"Yskie"},"content":" name \u003d st[0].substring(9);","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"Yskie"},"content":" taskList.add(new Deadline(name.trim(), st[1]));","lastModifiedDate":"2024-01-29"},{"lineNumber":120,"author":{"gitId":"Yskie"},"content":" // printAdd(tasks.get(tasks.size() - 1).toString(), tasks.size());","lastModifiedDate":"2024-01-29"},{"lineNumber":121,"author":{"gitId":"Yskie"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + \" \" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2024-01-29"},{"lineNumber":122,"author":{"gitId":"Yskie"},"content":" + \"\\n Now you have \" + taskList.size() + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":123,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":124,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":125,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"deadline \u003cdescription\u003e /by \u003cyyyy-mm-dd\u003e \u003ctime\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-30"},{"lineNumber":126,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":127,"author":{"gitId":"Yskie"},"content":" throw e;","lastModifiedDate":"2024-01-30"},{"lineNumber":128,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":129,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":130,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":131,"author":{"gitId":"Yskie"},"content":" public String event() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":132,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":133,"author":{"gitId":"Yskie"},"content":" String name \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":134,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":135,"author":{"gitId":"Yskie"},"content":" if (!s[0].equals(\"event\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":136,"author":{"gitId":"Yskie"},"content":" System.out.println(\"YES\");","lastModifiedDate":"2024-01-29"},{"lineNumber":137,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"event \u003cdescription\u003e /from \u003cstart date\u003e /to \u003cend date\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":138,"author":{"gitId":"Yskie"},"content":" } else {","lastModifiedDate":"2024-01-29"},{"lineNumber":139,"author":{"gitId":"Yskie"},"content":" String[] from \u003d input.split(\"/from \");","lastModifiedDate":"2024-01-29"},{"lineNumber":140,"author":{"gitId":"Yskie"},"content":" String[] fromTo \u003d from[1].split(\"/to \");","lastModifiedDate":"2024-01-29"},{"lineNumber":141,"author":{"gitId":"Yskie"},"content":" name \u003d from[0].substring(5);","lastModifiedDate":"2024-01-29"},{"lineNumber":142,"author":{"gitId":"Yskie"},"content":" taskList.add(new Event(name.trim(), fromTo[0].trim(), fromTo[1].trim()));","lastModifiedDate":"2024-01-29"},{"lineNumber":143,"author":{"gitId":"Yskie"},"content":" return \"Got it. I\u0027ve added this task:\\n\" + \" \" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2024-01-29"},{"lineNumber":144,"author":{"gitId":"Yskie"},"content":" + \"\\n Now you have \" + taskList.size() + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":145,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":146,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":147,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"event \u003cdescription\u003e /from \u003cstart date\u003e /to \u003cend date\u003e\\\" to create a new deadline!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":148,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":149,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":150,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":151,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":152,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":153,"author":{"gitId":"Yskie"},"content":" public String delete() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":154,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":155,"author":{"gitId":"Yskie"},"content":" String[] s \u003d input.split(\" \");","lastModifiedDate":"2024-01-29"},{"lineNumber":156,"author":{"gitId":"Yskie"},"content":" if (s.length !\u003d 2 || !s[0].equals(\"delete\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":157,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"delete \u003cnumber\u003e\\\" to delete the task!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":158,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":159,"author":{"gitId":"Yskie"},"content":" int ind \u003d Integer.parseInt(s[1]); ","lastModifiedDate":"2024-01-29"},{"lineNumber":160,"author":{"gitId":"Yskie"},"content":" String output \u003d \"Noted. I\u0027ve removed this task:\" + ","lastModifiedDate":"2024-01-29"},{"lineNumber":161,"author":{"gitId":"Yskie"},"content":" \"\\n \" + taskList.get(ind - 1).toString() + ","lastModifiedDate":"2024-01-29"},{"lineNumber":162,"author":{"gitId":"Yskie"},"content":" \"\\n Now you have \" + (taskList.size() - 1) + \" task(s) in the list.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":163,"author":{"gitId":"Yskie"},"content":" taskList.delete(ind - 1);","lastModifiedDate":"2024-01-29"},{"lineNumber":164,"author":{"gitId":"Yskie"},"content":" return output;","lastModifiedDate":"2024-01-29"},{"lineNumber":165,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":166,"author":{"gitId":"Yskie"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":167,"author":{"gitId":"Yskie"},"content":" return \"OOPS! You need to type \\\"delete \u003cnumber\u003e\\\" to delete the task!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":168,"author":{"gitId":"Yskie"},"content":" } catch (NullPointerException | IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":169,"author":{"gitId":"Yskie"},"content":" return ","lastModifiedDate":"2024-01-29"},{"lineNumber":170,"author":{"gitId":"Yskie"},"content":" \"OOPS! Please type a valid number! Type \\\"list\\\" to check the lists of tasks.\";","lastModifiedDate":"2024-01-29"},{"lineNumber":171,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":172,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Something went wrong...\");","lastModifiedDate":"2024-01-29"},{"lineNumber":173,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":174,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":175,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":176,"author":{"gitId":"Yskie"},"content":" public String bye() {","lastModifiedDate":"2024-01-29"},{"lineNumber":177,"author":{"gitId":"Yskie"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":178,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":179,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":180,"author":{"gitId":"Yskie"},"content":" public String cmdUnknown() {","lastModifiedDate":"2024-01-29"},{"lineNumber":181,"author":{"gitId":"Yskie"},"content":" return \"I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2024-01-29"},{"lineNumber":182,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":183,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":184,"author":{"gitId":"Yskie"},"content":" public static boolean checkCmd(String input, String name, int len) {","lastModifiedDate":"2024-01-29"},{"lineNumber":185,"author":{"gitId":"Yskie"},"content":" return input.length() \u003e\u003d len \u0026\u0026 input.substring(0, len).equals(name);","lastModifiedDate":"2024-01-29"},{"lineNumber":186,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":187,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":187}},{"path":"src/main/java/tiny/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import tiny.exceptions.TinyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":"public class Storage {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" protected String filePath;","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" // Returns a string of message to be parsed.","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" public ArrayList\u003cString\u003e load() throws TinyException {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" //Creating the folder if it does not exists","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" if (!new File(\"../../../data\").exists()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" new File(\"../../../data\").mkdirs(); ","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" ArrayList\u003cString\u003e dataFromFile \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" dataFromFile.add(data);","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" sc.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" return dataFromFile;","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"\");","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" public void save(ArrayList\u003cString\u003e tasksToSave) {","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" new FileWriter(filePath).close();","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" FileWriter myWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c tasksToSave.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" myWriter.write(tasksToSave.get(i) + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" myWriter.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" System.out.println(\"An error occurred when saving.\");","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":55}},{"path":"src/main/java/tiny/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import tiny.exceptions.TinyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Deadline;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Event;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Task;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"import tiny.tasks.Todo;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":"public class TaskList {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" protected ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" public TaskList(ArrayList\u003cString\u003e data) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" // Parse the data here.","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c data.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" String[] entry \u003d data.get(i).split(\" \\\\| \");","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" if (entry[0].equals(\"T\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" Todo todo \u003d new Todo(entry[2], entry[1].equals(\"0\") ? false : true);","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" tasks.add(todo);","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" } else if (entry[0].equals(\"D\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" Deadline deadline \u003d new Deadline(entry[2], entry[1].equals(\"0\") ? false : true, entry[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" tasks.add(deadline);","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" } else if (entry[0].equals(\"E\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" Event event \u003d new Event(entry[2], entry[1].equals(\"0\") ? false : true, entry[3], entry[4]);","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" tasks.add(event);","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" public void add(Task task) {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" public void delete(Integer ind) {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" tasks.remove(tasks.get(ind));","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" public Task get(Integer ind) {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" return tasks.get(ind);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" public String list() {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" return \"You don\u0027t have any tasks!\";","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" String output \u003d \"\";","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" output +\u003d (i + 1) + \".\" + tasks.get(i);","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" output +\u003d \"\\n \";","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" return output;","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" public Integer size() {","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" return tasks.size();","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" public ArrayList\u003cString\u003e toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":" ArrayList\u003cString\u003e tasksToSave \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":" tasksToSave.add(tasks.get(i).toSave());","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" return tasksToSave;","lastModifiedDate":"2024-01-29"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":69}},{"path":"src/main/java/tiny/Tiny.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import tiny.exceptions.TinyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"public class Tiny {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" private Storage storage;","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" private Ui ui;","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" public Tiny(String filePath) {","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" ui \u003d new Ui();","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" ui.showLoadingError();","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" public void run() throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" ui.start();","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" BufferedReader br \u003d new BufferedReader(new InputStreamReader(System.in));","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" while (!isExit) {","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" String input \u003d br.readLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" printContent(parser.parse(input, tasks));","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" storage.save(tasks.toSave());","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" isExit \u003d parser.isExit();","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" } catch (TinyException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" new Tiny(\"../../../data/tasks.txt\").run();","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" // Printing Methods","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" public static void tabPrint(String input) {","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" System.out.println(\" \" + input);","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" public static void printLine() {","lastModifiedDate":"2024-01-25"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" tabPrint(\"____________________________________________________________\\n\");","lastModifiedDate":"2024-01-25"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" public static void printContent(String input) {","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" printLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" tabPrint(input);","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":" printLine();","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Yskie":60}},{"path":"src/main/java/tiny/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"public class Ui {","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":" public void start() {","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":" System.out.println(\" Hello! I\u0027m Tiny!\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" \" What can I do for you?\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" public void showLoadingError() {","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" System.out.println(\"Error loading the data!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" public void showError(String message) {","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" System.out.println(message);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":21}},{"path":"src/main/java/tiny/exceptions/TinyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny.exceptions;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"public class TinyException extends Exception {","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" public TinyException(String message) {","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":" super(message);","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"Yskie":7}},{"path":"src/main/java/tiny/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import tiny.exceptions.TinyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" protected LocalDateTime endDatetime;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" public Deadline(String name, String endDatetime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" this.endDatetime \u003d datetimeParser(endDatetime);","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" public Deadline(String name, boolean isDone, String endDatetime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" super(name, isDone);","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" this.endDatetime \u003d datetimeParser(endDatetime);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" public LocalDateTime datetimeParser(String date) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" String[] dateTimeSplit \u003d date.split(\" \");","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" int year \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" int month \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" int day \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" int hour \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" int minute \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" String errorMsg \u003d \"Please ensure that you are using the format deadline \u003cdescription\u003e /by yyyy-MM-dd \u003ctime\u003e. eg. deadline assignment /by 2024-01-29 1835\";","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" //Date","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" String[] dateSplit \u003d dateTimeSplit[0].split(\"-\");","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" year \u003d Integer.parseInt(dateSplit[0]);","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" month \u003d Integer.parseInt(dateSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" day \u003d Integer.parseInt(dateSplit[2]);","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" //Time","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" if (dateTimeSplit[1].length() \u003d\u003d 4) {","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" try { ","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" int time \u003d Integer.parseInt(dateTimeSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" if (time \u003e\u003d 2400 || time \u003c 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Please choose a time from 0000 to 2359!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" String[] hourMinuteSplit \u003d dateTimeSplit[1].split(\"\");","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" hour \u003d Integer.parseInt(hourMinuteSplit[0] + hourMinuteSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" minute \u003d Integer.parseInt(hourMinuteSplit[2] + hourMinuteSplit[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" //Combine","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" return LocalDateTime.of(year, month, day, hour, minute);","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":" public String endDatetimeFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":" return endDatetime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":" public String endDatetimeSaveFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Yskie"},"content":" return endDatetime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"Yskie"},"content":" return \"D\" + super.toSave() + \" | \" + endDatetimeSaveFormat();","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":78,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":79,"author":{"gitId":"Yskie"},"content":" return \"[D]\" + super.toString() + \" (by: \" + endDatetimeFormat() + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":81,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":82,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":82}},{"path":"src/main/java/tiny/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"import tiny.exceptions.TinyException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":"import java.time.LocalTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" protected LocalDateTime startDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" protected LocalTime endDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" public Event(String name, String startDateTime, String endDateTime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" this.startDateTime \u003d startDatetimeParser(startDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" this.endDateTime \u003d endDatetimeParser(endDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" public Event(String name, boolean isDone, String startDateTime, String endDateTime) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" super(name, isDone);","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" this.startDateTime \u003d startDatetimeParser(startDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":" this.endDateTime \u003d endDatetimeParser(endDateTime);","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" public LocalDateTime startDatetimeParser(String date) throws TinyException {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":" String[] dateTimeSplit \u003d date.split(\" \");","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" int year \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" int month \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" int day \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" int hour \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" int minute \u003d 0;","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" String errorMsg \u003d \"Please ensure that you are using the format event \u003cdescription\u003e /from yyyy-MM-dd \u003ctime\u003e /to \u003cend date\u003e. \"","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" + \"eg. event meeting /from 2024-01-29 1835 /to 2035\";","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":" // Date","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" String[] dateSplit \u003d dateTimeSplit[0].split(\"-\");","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" year \u003d Integer.parseInt(dateSplit[0]);","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":" month \u003d Integer.parseInt(dateSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" day \u003d Integer.parseInt(dateSplit[2]);","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" // Time","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" if (dateTimeSplit[1].length() \u003d\u003d 4) {","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":" int time \u003d Integer.parseInt(dateTimeSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"Yskie"},"content":" if (time \u003e\u003d 2400 || time \u003c 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Please choose a time from 0000 to 2359!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"Yskie"},"content":" String[] hourMinuteSplit \u003d dateTimeSplit[1].split(\"\");","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"Yskie"},"content":" hour \u003d Integer.parseInt(hourMinuteSplit[0] + hourMinuteSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"Yskie"},"content":" minute \u003d Integer.parseInt(hourMinuteSplit[2] + hourMinuteSplit[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"Yskie"},"content":" // Combine","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"Yskie"},"content":" return LocalDateTime.of(year, month, day, hour, minute);","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"Yskie"},"content":" public LocalTime endDatetimeParser(String timeStr) throws TinyException { ","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"Yskie"},"content":" String errorMsg \u003d \"Please ensure that you are using the format event \u003cdescription\u003e /from yyyy-MM-dd \u003ctime\u003e /to \u003cend date\u003e. \"","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"Yskie"},"content":" + \"eg. event meeting /from 2024-01-29 1835 /to 2035\";","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"Yskie"},"content":" int time \u003d Integer.parseInt(timeStr);","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"Yskie"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"Yskie"},"content":" if (time \u003e\u003d 2400 || time \u003c 0) {","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"Yskie"},"content":" throw new TinyException(\"Please choose your end time from 0000 to 2359!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"Yskie"},"content":" String[] hourMinuteSplit \u003d timeStr.split(\"\");","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"Yskie"},"content":" int hour \u003d Integer.parseInt(hourMinuteSplit[0] + hourMinuteSplit[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"Yskie"},"content":" int minute \u003d Integer.parseInt(hourMinuteSplit[2] + hourMinuteSplit[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"Yskie"},"content":" return LocalTime.of(hour, minute);","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"Yskie"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"Yskie"},"content":" throw new TinyException(errorMsg);","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"Yskie"},"content":" public String startDatetimeFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy, HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"Yskie"},"content":" return startDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"Yskie"},"content":" public String endDatetimeFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":94,"author":{"gitId":"Yskie"},"content":" return endDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"Yskie"},"content":" public String startDatetimeSaveFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"Yskie"},"content":" return startDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-30"},{"lineNumber":101,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":102,"author":{"gitId":"Yskie"},"content":" public String endDatetimeSaveFormat() {","lastModifiedDate":"2024-01-30"},{"lineNumber":103,"author":{"gitId":"Yskie"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":104,"author":{"gitId":"Yskie"},"content":" return endDateTime.format(formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":105,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":106,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":107,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":108,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":109,"author":{"gitId":"Yskie"},"content":" return \"E\" + super.toSave() + \" | \" + startDatetimeSaveFormat() + \" | \" + endDatetimeSaveFormat();","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":111,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":112,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":113,"author":{"gitId":"Yskie"},"content":" return \"[E]\" + super.toString() + \" (from: \" + startDatetimeFormat() + \" to: \" + endDatetimeFormat() + \")\";","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":115,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":115}},{"path":"src/main/java/tiny/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"public class Task {","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" protected String name;","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":" protected boolean isDone;","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" protected String type \u003d \" \";","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" //add","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" public String getName() {","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" return this.name;","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":" public String getTypeIcon() {","lastModifiedDate":"2024-01-25"},{"lineNumber":24,"author":{"gitId":"Yskie"},"content":" return this.type;","lastModifiedDate":"2024-01-25"},{"lineNumber":25,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-25"},{"lineNumber":26,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":27,"author":{"gitId":"Yskie"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"Yskie"},"content":" return (this.isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-25"},{"lineNumber":29,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"Yskie"},"content":" ","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"Yskie"},"content":" public void taskDone() {","lastModifiedDate":"2024-01-25"},{"lineNumber":32,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d true;","lastModifiedDate":"2024-01-25"},{"lineNumber":33,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"Yskie"},"content":" public void taskUndone() {","lastModifiedDate":"2024-01-25"},{"lineNumber":36,"author":{"gitId":"Yskie"},"content":" this.isDone \u003d false;","lastModifiedDate":"2024-01-25"},{"lineNumber":37,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"Yskie"},"content":" return \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + name;","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":44,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"Yskie"},"content":" return \"[\" + getStatusIcon() + \"] \" + getName();","lastModifiedDate":"2024-01-25"},{"lineNumber":46,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":47,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":48,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"Yskie":48}},{"path":"src/main/java/tiny/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"package tiny.tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":" public Todo(String name) {","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"Yskie"},"content":" super(name);","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"Yskie"},"content":" public Todo(String name, boolean isDone) {","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"Yskie"},"content":" super(name, isDone);","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"Yskie"},"content":" } ","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"Yskie"},"content":" public String toSave() {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"Yskie"},"content":" return \"T\" + super.toSave();","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"Yskie"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"Yskie"},"content":" @Override","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"Yskie"},"content":" public String toString() {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"Yskie"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":21,"author":{"gitId":"Yskie"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"Yskie"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Yskie"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"Yskie"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"Yskie"},"content":"list","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"Yskie"},"content":"bye","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"Yskie":4}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"Yskie"},"content":"java -classpath ../bin Tiny \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"Yskie":1,"-":37}}] diff --git a/Yskie_ip_master/commits.json b/Yskie_ip_master/commits.json index c64cbce5..74efe25c 100644 --- a/Yskie_ip_master/commits.json +++ b/Yskie_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Yskie":[{"date":"2024-01-24","commitResults":[{"hash":"163b293c334a2713f7a0d6e36bff3f30cf082107","isMergeCommit":false,"messageTitle":"Implemented Skeletal Version of Tiny","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"81ff1a1a1157ca52dd13d53f74ab9527f1c023df","isMergeCommit":false,"messageTitle":"Echo and Bye Function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":17}}},{"hash":"3126f232d73c7f954b38df4465fed85ad60f0d5d","isMergeCommit":false,"messageTitle":"Implemented Add and List Functions with a Task class.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"f887b32cf8c043fec2f4db3add3e207f0d1366c0","isMergeCommit":false,"messageTitle":"Added Mark and Umarked Function with Exception Handling.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":22}}}]},{"date":"2024-01-25","commitResults":[{"hash":"da01acab4d43dad899763c6ecd7321a34bb6a11c","isMergeCommit":false,"messageTitle":"Added “Deadline, Event and Todo class and implemented their methods.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":53}}},{"hash":"1a6ef84f64caac0d4d2ec2fcad3a4e92c682b291","isMergeCommit":false,"messageTitle":"Handled Exceptions and Incorrect Inputs.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"38cd27c05e2bc86dae4afb9b1eaf98fbbce116c0","isMergeCommit":false,"messageTitle":"Tested using I/O redirection.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2}}},{"hash":"be10f543020755b6bf8f52634aaf43ea0b287cf4","isMergeCommit":false,"messageTitle":"Implemented Deletion Feature.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":7}}}]},{"date":"2024-01-29","commitResults":[{"hash":"6ee7268459de06f9647845eac333ddfba40b7839","isMergeCommit":false,"messageTitle":"Add Save function and OOP optimisation with the respective class","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":381,"deletions":219}}},{"hash":"cf0cb0752adf2e5f9049485bd0351e8f1a9264f1","isMergeCommit":false,"messageTitle":"Bug fix for the data directory is not found","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":0}}},{"hash":"4fc817847c40d937770a53f4509924abd5ca4738","isMergeCommit":false,"messageTitle":"Updated the varaibles modifier to be protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"b4e6d09b47c3d718f6dbe741a1c1fd5adef0c112","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-01-30","commitResults":[{"hash":"2a851ccb5e255aa33c634fcf1d663da0301a9032","isMergeCommit":false,"messageTitle":"Changed deadline to be stored as LocalDateTime for deadline and event","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":176,"deletions":37}}},{"hash":"155e0fa25e484a472586697c901e1353b314d4be","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e82947da2615dccc43799fddfd38e57569ddeb7","isMergeCommit":false,"messageTitle":"Refactored code to follow OOP Style","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"Yskie":{"java":627,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":5}},"authorContributionVariance":{"Yskie":35663.418},"authorDisplayNameMap":{"Yskie":"CS2103T-W13-4 YONG..KANG"}} +{"authorDailyContributionsMap":{"Yskie":[{"date":"2024-01-24","commitResults":[{"hash":"163b293c334a2713f7a0d6e36bff3f30cf082107","isMergeCommit":false,"messageTitle":"Implemented Skeletal Version of Tiny","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"81ff1a1a1157ca52dd13d53f74ab9527f1c023df","isMergeCommit":false,"messageTitle":"Echo and Bye Function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":17}}},{"hash":"3126f232d73c7f954b38df4465fed85ad60f0d5d","isMergeCommit":false,"messageTitle":"Implemented Add and List Functions with a Task class.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":1}}},{"hash":"f887b32cf8c043fec2f4db3add3e207f0d1366c0","isMergeCommit":false,"messageTitle":"Added Mark and Umarked Function with Exception Handling.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":22}}}]},{"date":"2024-01-25","commitResults":[{"hash":"da01acab4d43dad899763c6ecd7321a34bb6a11c","isMergeCommit":false,"messageTitle":"Added “Deadline, Event and Todo class and implemented their methods.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":53}}},{"hash":"1a6ef84f64caac0d4d2ec2fcad3a4e92c682b291","isMergeCommit":false,"messageTitle":"Handled Exceptions and Incorrect Inputs.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"38cd27c05e2bc86dae4afb9b1eaf98fbbce116c0","isMergeCommit":false,"messageTitle":"Tested using I/O redirection.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":1,"deletions":1},"sh":{"insertions":2,"deletions":2}}},{"hash":"be10f543020755b6bf8f52634aaf43ea0b287cf4","isMergeCommit":false,"messageTitle":"Implemented Deletion Feature.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":7}}}]},{"date":"2024-01-29","commitResults":[{"hash":"6ee7268459de06f9647845eac333ddfba40b7839","isMergeCommit":false,"messageTitle":"Add Save function and OOP optimisation with the respective class","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":381,"deletions":219}}},{"hash":"cf0cb0752adf2e5f9049485bd0351e8f1a9264f1","isMergeCommit":false,"messageTitle":"Bug fix for the data directory is not found","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":7,"deletions":0}}},{"hash":"4fc817847c40d937770a53f4509924abd5ca4738","isMergeCommit":false,"messageTitle":"Updated the varaibles modifier to be protected","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":10}}},{"hash":"b4e6d09b47c3d718f6dbe741a1c1fd5adef0c112","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-01-30","commitResults":[{"hash":"2a851ccb5e255aa33c634fcf1d663da0301a9032","isMergeCommit":false,"messageTitle":"Changed deadline to be stored as LocalDateTime for deadline and event","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":176,"deletions":37}}},{"hash":"155e0fa25e484a472586697c901e1353b314d4be","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4e82947da2615dccc43799fddfd38e57569ddeb7","isMergeCommit":false,"messageTitle":"Refactored code to follow OOP Style","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":10}}},{"hash":"4d9c727a0f14ca38ae21165c81675498e36cd318","isMergeCommit":false,"messageTitle":"Refactor code into a package \u0027tiny\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":1}}},{"hash":"56f501503f6a6f142717b62793b3efee3dfd2ed1","isMergeCommit":false,"messageTitle":"Refactored code to follow Coding Standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":8}}},{"hash":"208c2d08e7f1a5d122c1a67ff330343f8b61b506","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Yskie":{"java":666,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":5}},"authorContributionVariance":{"Yskie":37065.855},"authorDisplayNameMap":{"Yskie":"CS2103T-W13-4 YONG..KANG"}} diff --git a/alfaloo_ip_master/authorship.json b/alfaloo_ip_master/authorship.json index 09806b3b..9b3d2a5e 100644 --- a/alfaloo_ip_master/authorship.json +++ b/alfaloo_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":"alfaloo"},"content":" mainClass.set(\"Lulu\")","lastModifiedDate":"2024-01-27"},{"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":"alfaloo"},"content":" archiveBaseName \u003d \"lulu\"","lastModifiedDate":"2024-01-27"},{"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":{"alfaloo":2,"-":40}},{"path":"src/main/java/Lulu.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"import parser.Parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import exceptions.LuluException;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidCommandException;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidDateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidSlashParameterException;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" * The main class for Lulu, a simple chatbot application.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" * Lulu interacts with the user through a command-line interface (CLI)","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * to perform tasks such as adding, listing, and deleting tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"public class Lulu {","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" /** The storage component for managing data persistence. */","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" private Storage storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" /** The task list for storing and managing tasks. */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" /** The parser for interpreting user input and generating commands. */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" private Parser parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * Constructs a new instance of Lulu with default configurations.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * Initializes the storage, task list, and parser.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public Lulu() {","lastModifiedDate":"2024-01-22"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" storage \u003d new Storage(\"src/main/java/data/lulu.txt\");","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" tasks \u003d new TaskList(storage.retrieveLines());","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * Initiates the Lulu application.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * Prints a welcome message to the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" public void start() {","lastModifiedDate":"2024-01-22"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Hello! I\u0027m Lulu \\n\\tWhat can I do for you?\");","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" * Exits the Lulu application.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" * Prints a goodbye message to the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" public void exit() {","lastModifiedDate":"2024-01-22"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" * Listens for user input and responds accordingly until the user exits.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" * Handles various user commands and exceptions during interaction.","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" public void respond() {","lastModifiedDate":"2024-01-22"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" while (true) {","lastModifiedDate":"2024-01-22"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" String input \u003d UI.nextLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-23"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2024-01-22"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" } else if (input.toLowerCase().equals(\"list\")) {","lastModifiedDate":"2024-01-22"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" UI.printTasks(this.tasks);","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" } else {","lastModifiedDate":"2024-01-23"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" command.execute(this.tasks, this.storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2024-01-23"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Sorry, I don\u0027t think I quite understood what you meant...\");","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Please ensure that you are inputting valid start and end dates.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidSlashParameterException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Please ensure that you are inputting valid date parameters.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" } catch (LuluException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" * The main method to run the Lulu chatbot application.","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" * Creates an instance of Lulu, starts the application, and handles exceptions.","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" * Exits the application with a goodbye message.","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" * @param args The command-line arguments (not used).","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-22"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" Lulu chatbot \u003d new Lulu();","lastModifiedDate":"2024-01-22"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" chatbot.start();","lastModifiedDate":"2024-01-22"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-23"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" chatbot.respond();","lastModifiedDate":"2024-01-22"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-23"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" chatbot.exit();","lastModifiedDate":"2024-01-22"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":99}},{"path":"src/main/java/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" * It extends the Command class and implements the execute method to carry out the addition of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" private Task task;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" * The string representation of the data to be saved in storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" private String saveData;","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * Constructs an AddCommand with the specified task and saveData.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" * @param saveData The string representation of the data to be saved in storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" public AddCommand(Task task, String saveData) {","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" this.task \u003d task;","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" this.saveData \u003d saveData;","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" * Executes the AddCommand, adding the task to the task list, saving data in storage,","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" * and printing a confirmation message to the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList to which the task is added.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage to save the task data.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" public void execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" storage.writeLine(this.saveData);","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" UI.print(\"\\t\" + this.task);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" UI.print(String.format(\"Now you have %d tasks in the list.\", tasks.getSize()));","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" * Retrieves the string representation of the data to be saved in storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" * @return The saveData string.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" public String getTestData() {","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" return saveData;","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":60}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":" * An abstract class representing a command in the task management system.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"public abstract class Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" * Enum representing various types of commands.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" public enum Types {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" LIST,","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" MARK,","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" UNMARK,","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" DELETE,","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" TODO,","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" DEADLINE,","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" EVENT,","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" QUERY,","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" FIND;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * Executes the command, modifying the task list and storage as needed.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @param tasks The {@code TaskList} to be modified.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * @param storage The {@code Storage} to be modified.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public abstract void execute(TaskList tasks, Storage storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" * Gets test data associated with the command.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" * @return A string containing test data for the command.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" public abstract String getTestData();","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":40}},{"path":"src/main/java/command/ManageCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidStatusUpdateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" * The ManageCommand class represents a command to manage tasks, such as marking, unmarking, or deleting.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" * It extends the Command class and implements the execute method to perform the specified manage action.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"public class ManageCommand extends Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * The type of manage command (MARK, UNMARK, DELETE).","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" private Command.Types type;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * The index of the task to be managed.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" private int index;","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * Constructs a ManageCommand with the specified command type and index.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @param type The type of manage command (MARK, UNMARK, DELETE).","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the task to be managed.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public ManageCommand(Command.Types type, int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" this.type \u003d type;","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * Executes the ManageCommand, performing the specified manage action on the given task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList on which the manage action is performed.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" public void execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" switch (this.type) {","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" case MARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" mark(tasks, storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" case UNMARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" unmark(tasks, storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" case DELETE:","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" delete(tasks, storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" * Retrieves an empty string as test data associated with ManageCommand.","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * @return An empty string used for testing.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public String getTestData() {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" return \"\";","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * Marks the task at the specified index as done, updating its status in the task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which the task is marked.","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" public void mark(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" if (index \u003e\u003d tasks.getSize() || index \u003c 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Oops! You did not give a valid index.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" Task task \u003d tasks.getTask(this.index);","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" task.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" String line \u003d storage.readLine(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" String newLine \u003d line.substring(0, line.length() - 5) + \"true\";","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" storage.updateLine(index, newLine);","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" storage.updateLine(index, newLine);","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidStatusUpdateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" UI.print(\"This task was already marked!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" * Unmarks the task at the specified index, updating its status in the task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which the task is unmarked.","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" public void unmark(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":" if (index \u003e\u003d tasks.getSize() || index \u003c 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Oops! You did not give a valid index.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" task.updateStatus(false);","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" UI.print(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" String line \u003d storage.readLine(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" String newLine \u003d line.substring(0, line.length() - 4) + \"false\";","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" storage.updateLine(index, newLine);","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidStatusUpdateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" UI.print(\"This task was already unmarked!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"alfaloo"},"content":" * Deletes the task at the specified index, removing it from the task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which the task is deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"alfaloo"},"content":" public void delete(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"alfaloo"},"content":" if (index \u003e\u003d tasks.getSize() || index \u003c 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Oops! You did not give a valid index.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"alfaloo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"alfaloo"},"content":" Task removed \u003d tasks.deleteTask(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"alfaloo"},"content":" storage.deleteLine(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"alfaloo"},"content":" UI.print(\"\\t\" + removed);","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"alfaloo"},"content":" UI.print(String.format(\"Now you have %d tasks in the list.\", tasks.getSize()));","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":137}},{"path":"src/main/java/command/QueryCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Deadline;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import task.Event;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * The QueryCommand class represents a command to query tasks based on type and date.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" * It extends the Command class and implements the execute method to perform the specified query action.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"public class QueryCommand extends Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" * The type of query command.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" private Command.Types commandType;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" * The type of task to be queried (deadline, event).","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" private String query;","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" * The date used for querying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" private LocalDate date;","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" * Constructs a QueryCommand with the specified command type, query type, and date.","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * @param commandType The type of query command.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * @param query The type of task to be queried (deadline, event).","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * @param date The date used for querying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" public QueryCommand(Command.Types commandType, String query, LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" this.query \u003d query;","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" this.date \u003d date;","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" * Executes the QueryCommand, performing the specified query action on the given task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList on which the query action is performed.","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" public void execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" switch (this.commandType) {","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" case QUERY:","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" query(tasks);","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" case FIND:","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" find(tasks);","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" * Retrieves the query type as test data associated with QueryCommand.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * @return The query type used for testing.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" public String getTestData() {","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" return this.query;","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" * Finds tasks based on the specified query type and date, printing the results to the UI.","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which tasks are queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" public void query(TaskList tasks) {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" String formattedDate \u003d this.date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" if (this.query.equals(\"deadline\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Below are deadlines that are due on \" + formattedDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" for (Task task : tasks.fetchAll()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" if (task instanceof Deadline \u0026\u0026 task.queryByDate(this.date)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" } else if (this.query.equals(\"event\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Below are events that are operating on \" + formattedDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" for (Task task : tasks.fetchAll()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" if (task instanceof Event \u0026\u0026 task.queryByDate(date)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Could not query given task type\");","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" * Finds and prints tasks in the task list that match the specified query.","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which tasks are queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" public void find(TaskList tasks) {","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" int index \u003d 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" for (Task task : tasks.fetchAll()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" if (task.getName().contains(this.query)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" UI.print(index + \".\" + task);","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":117}},{"path":"src/main/java/data/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"todo todo1","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"deadline deadline1 /by 2023-01-02","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"event event1 /from 2022-03-04 /to 2024-05-06","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"todo todo2","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":4}},{"path":"src/main/java/data/lulu.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"todo,todo1,false","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"event,event1,2022-03-04,2024-05-06,false","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"todo,bye,true","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"todo,great day,false","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"todo,great week,false","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"todo,thats great,false","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":6}},{"path":"src/main/java/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidCommandException extends LuluException {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidCommandException() {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Could not decipher input string\");","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidDateException extends LuluException{","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidDateException() {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Invalid date detected\");","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/InvalidSlashParameterException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidSlashParameterException extends LuluException {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidSlashParameterException() {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Could not decipher command after slash\");","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/InvalidStatusUpdateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidStatusUpdateException extends LuluException {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidStatusUpdateException() {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Status was already updated to desired value\");","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/LuluException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class LuluException extends Exception {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public LuluException(String message) {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(message);","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Deadline;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import task.Event;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import task.Todo;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import command.AddCommand;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import command.ManageCommand;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import command.QueryCommand;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import exceptions.LuluException;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidCommandException;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidDateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidSlashParameterException;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * The Parser class is responsible for parsing user input and creating corresponding Command objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" * It includes methods for parsing various commands such as adding, managing, and querying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":"public class Parser {","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * Parses the input string and creates the corresponding Command object.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" * @return The Command object based on the parsed input.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" public Command parse(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" String firstWord \u003d input.split(\" \")[0];","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" if (input.toLowerCase().equals(\"list\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.LIST, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"mark\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.MARK, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"unmark\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.UNMARK, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"delete\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.DELETE, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" return addTasks(Command.Types.TODO, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" return addTasks(Command.Types.DEADLINE, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"event\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" return addTasks(Command.Types.EVENT, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"query\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.QUERY, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"find\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.FIND, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" * Creates a ManageCommand object based on the specified command type and input.","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" * @param command The type of ManageCommand (MARK, UNMARK, DELETE, FIND).","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public Command manageTasks(Command.Types command, String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" switch (command) {","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" case MARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" return mark(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" case UNMARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" return unmark(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" case DELETE:","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" return delete(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" case QUERY:","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" return query(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" case FIND:","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" return find(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" * Creates an AddCommand object based on the specified command type and input.","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" * @param command The type of AddCommand (TODO, DEADLINE, EVENT).","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" public Command addTasks(Command.Types command, String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" switch (command) {","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" case TODO:","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" return todo(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" return deadline(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" case EVENT:","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" return event(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a MARK command and creates the corresponding ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object for marking a task.","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" public Command mark(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" int index \u003d Integer.valueOf(words[1]) - 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" return new ManageCommand(Command.Types.MARK, index);","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for an UNMARK command and creates the corresponding ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object for unmarking a task.","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"alfaloo"},"content":" public Command unmark(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"alfaloo"},"content":" int index \u003d Integer.valueOf(words[1]) - 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"alfaloo"},"content":" return new ManageCommand(Command.Types.UNMARK, index);","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a DELETE command and creates the corresponding ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":138,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object for deleting a task.","lastModifiedDate":"2024-01-27"},{"lineNumber":139,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":140,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":141,"author":{"gitId":"alfaloo"},"content":" public Command delete(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":142,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":143,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":144,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":145,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":146,"author":{"gitId":"alfaloo"},"content":" int index \u003d Integer.valueOf(words[1]) - 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":147,"author":{"gitId":"alfaloo"},"content":" return new ManageCommand(Command.Types.DELETE, index);","lastModifiedDate":"2024-01-27"},{"lineNumber":148,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":149,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":150,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":151,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a FIND command and creates the corresponding QueryCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":152,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":153,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":154,"author":{"gitId":"alfaloo"},"content":" * @return The QueryCommand object for finding tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":155,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":156,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":157,"author":{"gitId":"alfaloo"},"content":" public Command query(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":158,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":159,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 2) {","lastModifiedDate":"2024-01-27"},{"lineNumber":160,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":161,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":162,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":163,"author":{"gitId":"alfaloo"},"content":" String taskType \u003d words[1].toLowerCase();","lastModifiedDate":"2024-01-27"},{"lineNumber":164,"author":{"gitId":"alfaloo"},"content":" LocalDate date \u003d LocalDate.parse(words[2]);","lastModifiedDate":"2024-01-27"},{"lineNumber":165,"author":{"gitId":"alfaloo"},"content":" return new QueryCommand(Command.Types.QUERY, taskType, date);","lastModifiedDate":"2024-01-27"},{"lineNumber":166,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":167,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":168,"author":{"gitId":"alfaloo"},"content":" public Command find(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":169,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":170,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":171,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":172,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":173,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":174,"author":{"gitId":"alfaloo"},"content":" String queryString \u003d words[1].toLowerCase();","lastModifiedDate":"2024-01-27"},{"lineNumber":175,"author":{"gitId":"alfaloo"},"content":" return new QueryCommand(Command.Types.FIND, queryString, null);","lastModifiedDate":"2024-01-27"},{"lineNumber":176,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":177,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":178,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":179,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a TODO command and creates the corresponding AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":180,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":181,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":182,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object for adding a Todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":183,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":184,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":185,"author":{"gitId":"alfaloo"},"content":" public Command todo(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":186,"author":{"gitId":"alfaloo"},"content":" if (input.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":187,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":188,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":189,"author":{"gitId":"alfaloo"},"content":" String name \u003d input.substring(5).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":190,"author":{"gitId":"alfaloo"},"content":" Todo todo \u003d new Todo(name);","lastModifiedDate":"2024-01-27"},{"lineNumber":191,"author":{"gitId":"alfaloo"},"content":" String data \u003d String.format(\"todo,%s,%b\", name, todo.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":192,"author":{"gitId":"alfaloo"},"content":" Command command \u003d new AddCommand(todo, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":193,"author":{"gitId":"alfaloo"},"content":" return command;","lastModifiedDate":"2024-01-27"},{"lineNumber":194,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":195,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":196,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":197,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a DEADLINE command and creates the corresponding AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":198,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":199,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":200,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object for adding a Deadline task.","lastModifiedDate":"2024-01-27"},{"lineNumber":201,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":202,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":203,"author":{"gitId":"alfaloo"},"content":" public Command deadline(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":204,"author":{"gitId":"alfaloo"},"content":" if (input.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":205,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":206,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":207,"author":{"gitId":"alfaloo"},"content":" int indexBy \u003d input.indexOf(\u0027/\u0027);","lastModifiedDate":"2024-01-27"},{"lineNumber":208,"author":{"gitId":"alfaloo"},"content":" if (!input.substring(indexBy + 1).split(\" \")[0].equals(\"by\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":209,"author":{"gitId":"alfaloo"},"content":" throw new InvalidSlashParameterException();","lastModifiedDate":"2024-01-27"},{"lineNumber":210,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":211,"author":{"gitId":"alfaloo"},"content":" String name \u003d input.substring(9, indexBy).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":212,"author":{"gitId":"alfaloo"},"content":" String by \u003d input.substring(indexBy + 3).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":213,"author":{"gitId":"alfaloo"},"content":" Deadline deadline \u003d new Deadline(name, LocalDate.parse(by));","lastModifiedDate":"2024-01-27"},{"lineNumber":214,"author":{"gitId":"alfaloo"},"content":" String data \u003d String.format(\"deadline,%s,%s,%b\", name, by, deadline.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":215,"author":{"gitId":"alfaloo"},"content":" Command command \u003d new AddCommand(deadline, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":216,"author":{"gitId":"alfaloo"},"content":" return command;","lastModifiedDate":"2024-01-27"},{"lineNumber":217,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":218,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":219,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":220,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for an EVENT command and creates the corresponding AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":221,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":222,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":223,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object for adding an Event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":224,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":225,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":226,"author":{"gitId":"alfaloo"},"content":" public Command event(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":227,"author":{"gitId":"alfaloo"},"content":" if (input.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":228,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":229,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":230,"author":{"gitId":"alfaloo"},"content":" int indexFrom \u003d input.indexOf(\u0027/\u0027);","lastModifiedDate":"2024-01-27"},{"lineNumber":231,"author":{"gitId":"alfaloo"},"content":" int indexTo \u003d input.indexOf(\u0027/\u0027, indexFrom + 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":232,"author":{"gitId":"alfaloo"},"content":" if (!input.substring(indexFrom + 1).split(\" \")[0].equals(\"from\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":233,"author":{"gitId":"alfaloo"},"content":" throw new InvalidSlashParameterException();","lastModifiedDate":"2024-01-27"},{"lineNumber":234,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":235,"author":{"gitId":"alfaloo"},"content":" if (!input.substring(indexTo + 1).split(\" \")[0].equals(\"to\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":236,"author":{"gitId":"alfaloo"},"content":" throw new InvalidSlashParameterException();","lastModifiedDate":"2024-01-27"},{"lineNumber":237,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":238,"author":{"gitId":"alfaloo"},"content":" String name \u003d input.substring(6, indexFrom).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":239,"author":{"gitId":"alfaloo"},"content":" String from \u003d input.substring(indexFrom + 5, indexTo).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":240,"author":{"gitId":"alfaloo"},"content":" String to \u003d input.substring(indexTo + 3).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":241,"author":{"gitId":"alfaloo"},"content":" if (LocalDate.parse(to).isBefore(LocalDate.parse(from))) {","lastModifiedDate":"2024-01-27"},{"lineNumber":242,"author":{"gitId":"alfaloo"},"content":" throw new InvalidDateException();","lastModifiedDate":"2024-01-27"},{"lineNumber":243,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":244,"author":{"gitId":"alfaloo"},"content":" Event event \u003d new Event(name, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2024-01-27"},{"lineNumber":245,"author":{"gitId":"alfaloo"},"content":" String data \u003d String.format(\"event,%s,%s,%s,%b\", name, from, to, event.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":246,"author":{"gitId":"alfaloo"},"content":" Command command \u003d new AddCommand(event, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":247,"author":{"gitId":"alfaloo"},"content":" return command;","lastModifiedDate":"2024-01-27"},{"lineNumber":248,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":249,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":249}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.io.File;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * The Storage class handles reading from and writing to a file for data persistence.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" * It provides methods for retrieving lines, writing a line, reading a line by index,","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * updating a line, and deleting a line from the stored data.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":"public class Storage {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" /** The file path for data storage. */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" private String filePath;","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /** The File object representing the file for data storage. */","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" private File file;","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" /** The Path object representing the file path. */","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" private Path path;","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" * Initializes the File and Path objects for data storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" * @param filePath The path to the file for data storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" this.path \u003d Path.of(this.filePath);","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" * Retrieves all lines from the stored data in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" * @return A List of strings representing the lines from the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" public List\u003cString\u003e retrieveLines() {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" List\u003cString\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" result.add(scanner.nextLine());","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Invalid file path provided, session will not be saved.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" return result;","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * Writes a line of data to the file for data storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" * @param data The data to be written to the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public void writeLine(String data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.file, true));","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" writer.write(data);","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" writer.newLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" writer.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" * Reads a line from the stored data based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the line to be read.","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" * @return The string representing the line at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" public String readLine(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" int i \u003d 0;","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" String line \u003d \"\";","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" line \u003d scanner.nextLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" if (i \u003d\u003d index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" return line;","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" i++;","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" return null;","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" * Updates a line in the stored data based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the line to be updated.","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":" * @param data The updated data to replace the existing line.","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" public void updateLine(int index, String data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(this.path);","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" lines.set(index, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.file, false));","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" writer.write(\"\");","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" writer \u003d new BufferedWriter(new FileWriter(this.file, true));","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" for (String str : lines) {","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" writer.write(str);","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" writer.newLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" writer.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"alfaloo"},"content":" * Deletes a line from the stored data based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the line to be deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"alfaloo"},"content":" public void deleteLine(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"alfaloo"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(this.path);","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"alfaloo"},"content":" lines.remove(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"alfaloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.file, false));","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"alfaloo"},"content":" writer.write(\"\");","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"alfaloo"},"content":" writer \u003d new BufferedWriter(new FileWriter(this.file, true));","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"alfaloo"},"content":" for (String str : lines) {","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"alfaloo"},"content":" writer.write(str);","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"alfaloo"},"content":" writer.newLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"alfaloo"},"content":" writer.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"alfaloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":138,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":139,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":140,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":140}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The Deadline class represents a task with a specific end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It extends the Task class and includes methods to query by date and provide a formatted string representation.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" /** The end date of the deadline. */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" private LocalDate endDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * Constructs a Deadline task with the specified name and end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * @param endDate The end date of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" public Deadline(String name, LocalDate endDate) {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" super(name);","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * Queries whether the deadline occurs on the specified date.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" * @param date The date to be queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @return true if the deadline occurs on the specified date, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public boolean queryByDate(LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" return date.isEqual(this.endDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" * Provides a formatted string representation of the Deadline task.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * @return A string representing the Deadline task in a readable format.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" String by \u003d this.endDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" return String.format(\"[D]%s %s (by: %s)\", (super.isMarked ? \"[X]\" : \"[ ]\"), super.name, by);","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":45}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The Event class represents a task with a start date and an end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It extends the Task class and includes methods to query by date and provide a formatted string representation.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" /** The start date of the event. */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" private LocalDate startDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" /** The end date of the event. */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" private LocalDate endDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" * Constructs an Event task with the specified name, start date, and end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * @param startDate The start date of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" * @param endDate The end date of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" public Event(String name, LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" super(name);","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" * Queries whether the event occurs on the specified date.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" * @param date The date to be queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" * @return true if the event occurs on the specified date, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" public boolean queryByDate(LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" return (date.isAfter(this.startDate) \u0026\u0026 date.isBefore(this.endDate)) || date.isEqual(this.startDate) || date.isEqual(this.endDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" * Provides a formatted string representation of the Event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" * @return A string representing the Event task in a readable format.","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" String from \u003d this.startDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" String to \u003d this.endDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", (super.isMarked ? \"[X]\" : \"[ ]\"), super.name, from, to);","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":50}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidStatusUpdateException;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The {@code Task} class represents a generic task with a name and a status.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It provides methods to update the task\u0027s status, get the task\u0027s name,","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" * get the task\u0027s status, query the task by date, and retrieve a string","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" * representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"public class Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" /** The name of the task. */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" protected String name;","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" /** The status of the task (marked or unmarked). */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" protected boolean isMarked;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * Constructs a new task with the specified name and initializes","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" * its status as unmarked.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" * Updates the status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" * @param status The new status of the task (true if marked, false if unmarked).","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" * @throws InvalidStatusUpdateException If the new status is the same as the current status.","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" public void updateStatus(boolean status) throws InvalidStatusUpdateException {","lastModifiedDate":"2024-01-23"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" if (this.isMarked \u003d\u003d status) {","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" throw new InvalidStatusUpdateException();","lastModifiedDate":"2024-01-23"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" this.isMarked \u003d status;","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" * Gets the name of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" * @return The name of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" public String getName() {","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" return this.name;","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" * Gets the status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" * @return The status of the task (true if marked, false if unmarked).","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" public boolean getStatus() {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" return this.isMarked;","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" * Queries the task by date. This method is overridden by subclasses.","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" * @param date The date to query.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" * @return {@code true} if the task is relevant to the specified date, {@code false} otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" public boolean queryByDate(LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" return false;","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" * @return A string representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" return \"[T]\" + (this.isMarked ? \"[X] \" : \"[ ] \") + this.name;","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":82}},{"path":"src/main/java/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" * The Todo class represents a simple task without a specific date.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" * It extends the Task class and provides a formatted string representation.","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" * Constructs a Todo task with the specified name.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" public Todo(String name) {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" super(name);","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" * Provides a formatted string representation of the Todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * @return A string representing the Todo task in a readable format.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" return \"[T]\" + (super.isMarked ? \"[X] \" : \"[ ] \") + super.name;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":25}},{"path":"src/main/java/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package tasklist;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Deadline;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import task.Event;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import task.Todo;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidStatusUpdateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" * The TaskList class manages a list of tasks and provides methods","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * to add, retrieve, delete, and fetch tasks from the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":"public class TaskList {","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /** The list of tasks managed by the TaskList. */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * Constructs a TaskList based on the data provided.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" * Parses the input data and initializes the list of tasks accordingly.","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * @param data The list of strings representing task data.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" public TaskList(List\u003cString\u003e data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" for (String line : data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d line.split(\",\");","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" if (words[0].equals(\"todo\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" Todo todo \u003d new Todo(words[1]);","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" if (words[2].equals(\"true\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" todo.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" this.tasks.add(todo);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" } else if (words[0].equals(\"deadline\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" Deadline deadline \u003d new Deadline(words[1], LocalDate.parse(words[2]));","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" if (words[3].equals(\"true\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" deadline.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" } else if (words[0].equals(\"event\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" Event event \u003d new Event(words[1], LocalDate.parse(words[2]), LocalDate.parse(words[3]));","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" if (words[4].equals(\"true\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" event.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" this.tasks.add(event);","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidStatusUpdateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" * @return true if the task is successfully added.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" return this.tasks.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * Retrieves a task from the TaskList based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" * @return The task at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" public Task getTask(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" return this.tasks.get(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" * Deletes a task from the TaskList based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" * @return The task that was removed from the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" public Task deleteTask(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" * Gets the number of tasks in the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" * @return The size of the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" public int getSize() {","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" return this.tasks.size();","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" * Fetches all tasks from the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" * @return A List containing all tasks in the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" public List\u003cTask\u003e fetchAll() {","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" return this.tasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":101}},{"path":"src/main/java/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package ui;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The UI class responsible for handling user interface interactions.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It provides methods for printing messages, reading user input, and displaying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class UI {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" * Prints the specified text to the console with an indentation.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * @param text The text to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" public static void print(Object text) {","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" System.out.println(\"\\t\" + text.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * Reads the next line of input from the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" * @return A String representing the user\u0027s input with leading and trailing whitespaces removed.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" public static String nextLine() {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" return scanner.nextLine().strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" * Prints the tasks in the provided TaskList with indices.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList containing tasks to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" public static void printTasks(TaskList tasks) {","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" String output \u003d (i + 1) + \".\" + tasks.getTask(i);","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" UI.print(output);","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":41}},{"path":"src/test/java/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidCommandException;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidDateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidSlashParameterException;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import exceptions.LuluException;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"public class ParserTest {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" public void test1() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 /to 2024-05-06\";","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" assertEquals(\"event,event1,2022-03-04,2024-05-06,false\", command.getTestData());","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" public void test2() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 /to 2022-03-04\";","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" assertEquals(\"event,event1,2022-03-04,2022-03-04,false\", command.getTestData());","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public void test3() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"find deadline 2023-01-02\";","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" assertEquals(\"deadline\", command.getTestData());","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" public void test4() {","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 /to 2021-03-04\";","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidDateException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" public void test5() {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event\";","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidCommandException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" public void test6() {","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 / 2023-03-04\";","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidSlashParameterException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":59}},{"path":"src/test/java/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import exceptions.*;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class TaskTest {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" public void test1() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Todo(\"test1\");","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" assertEquals(false, task.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" public void test2() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Todo(\"test2\");","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" task.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" assertEquals(true, task.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" public void test3() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Todo(\"test3\");","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidStatusUpdateException.class, () -\u003e task.updateStatus(false));","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" public void test4() {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Deadline(\"test4\", LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" assertEquals(true, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" public void test5() {","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Deadline(\"test5\", LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2021-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" assertEquals(false, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" public void test6() {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Event(\"test6\", LocalDate.parse(\"2020-01-01\"), LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2021-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" assertEquals(true, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" public void test7() {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Event(\"test7\", LocalDate.parse(\"2021-01-01\"), LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2020-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" assertEquals(false, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":65}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"todo borrow book","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"list","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":4}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"java -classpath ../bin Lulu \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"alfaloo":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" mainClass.set(\"Lulu\")","lastModifiedDate":"2024-01-27"},{"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":"alfaloo"},"content":" archiveBaseName \u003d \"lulu\"","lastModifiedDate":"2024-01-27"},{"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":{"alfaloo":2,"-":40}},{"path":"src/main/java/Lulu.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"import parser.Parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import exceptions.LuluException;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidCommandException;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidDateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidSlashParameterException;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" * The main class for Lulu, a simple chatbot application.","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" * Lulu interacts with the user through a command-line interface (CLI)","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * to perform tasks such as adding, listing, and deleting tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"public class Lulu {","lastModifiedDate":"2024-01-22"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" /** The storage component for managing data persistence. */","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" private Storage storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" /** The task list for storing and managing tasks. */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" /** The parser for interpreting user input and generating commands. */","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" private Parser parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * Constructs a new instance of Lulu with default configurations.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * Initializes the storage, task list, and parser.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public Lulu() {","lastModifiedDate":"2024-01-22"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" storage \u003d new Storage(\"src/main/java/data/lulu.txt\");","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" tasks \u003d new TaskList(storage.retrieveLines());","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * Listens for user input and responds accordingly until the user exits.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * Handles various user commands and exceptions during interaction.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" public void respond() {","lastModifiedDate":"2024-01-22"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" while (true) {","lastModifiedDate":"2024-01-22"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" String input \u003d UI.nextLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-23"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" if (input.toLowerCase().equals(\"bye\")) {","lastModifiedDate":"2024-01-22"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-22"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" } else if (input.toLowerCase().equals(\"list\")) {","lastModifiedDate":"2024-01-22"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" UI.printTasks(this.tasks);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" } else {","lastModifiedDate":"2024-01-23"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" command.execute(this.tasks, this.storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2024-01-23"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Sorry, I don\u0027t think I quite understood what you meant...\");","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidDateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Please ensure that you are inputting valid start and end dates.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidSlashParameterException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Please ensure that you are inputting valid date parameters.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" } catch (LuluException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" * The main method to run the Lulu chatbot application.","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * Creates an instance of Lulu, starts the application, and handles exceptions.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" * Exits the application with a goodbye message.","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" * @param args The command-line arguments (not used).","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2024-01-22"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" Lulu chatbot \u003d new Lulu();","lastModifiedDate":"2024-01-22"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" UI.start();","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-23"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" chatbot.respond();","lastModifiedDate":"2024-01-22"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" } catch (Exception e) {","lastModifiedDate":"2024-01-23"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" UI.exit();","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":83}},{"path":"src/main/java/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * The AddCommand class represents a command to add a new task to the task list.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" * It extends the Command class and implements the execute method to carry out the addition of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" private Task task;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" * The string representation of the data to be saved in storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" private String saveData;","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * Constructs an AddCommand with the specified task and saveData.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" * @param saveData The string representation of the data to be saved in storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" public AddCommand(Task task, String saveData) {","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" this.task \u003d task;","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" this.saveData \u003d saveData;","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" * Executes the AddCommand, adding the task to the task list, saving data in storage,","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" * and printing a confirmation message to the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList to which the task is added.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage to save the task data.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" public void execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" tasks.addTask(this.task);","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" storage.writeLine(this.saveData);","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" UI.print(\"\\t\" + this.task);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" UI.print(String.format(\"Now you have %d tasks in the list.\", tasks.getSize()));","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" * Retrieves the string representation of the data to be saved in storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" * @return The saveData string.","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" public String getTestData() {","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" return saveData;","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":60}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":" * An abstract class representing a command in the task management system.","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"public abstract class Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" * Enum representing various types of commands.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" public enum Types {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" LIST,","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" MARK,","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" UNMARK,","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" DELETE,","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" TODO,","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" DEADLINE,","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" EVENT,","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" QUERY,","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" FIND;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * Executes the command, modifying the task list and storage as needed.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @param tasks The {@code TaskList} to be modified.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * @param storage The {@code Storage} to be modified.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public abstract void execute(TaskList tasks, Storage storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" * Gets test data associated with the command.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" * @return A string containing test data for the command.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" public abstract String getTestData();","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":40}},{"path":"src/main/java/command/ManageCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidStatusUpdateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" * The ManageCommand class represents a command to manage tasks, such as marking, unmarking, or deleting.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" * It extends the Command class and implements the execute method to perform the specified manage action.","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"public class ManageCommand extends Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * The type of manage command (MARK, UNMARK, DELETE).","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" private Command.Types type;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * The index of the task to be managed.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" private int index;","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * Constructs a ManageCommand with the specified command type and index.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @param type The type of manage command (MARK, UNMARK, DELETE).","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the task to be managed.","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public ManageCommand(Command.Types type, int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" this.type \u003d type;","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" this.index \u003d index;","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * Executes the ManageCommand, performing the specified manage action on the given task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList on which the manage action is performed.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" public void execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" switch (this.type) {","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" case MARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" mark(tasks, storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" case UNMARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" unmark(tasks, storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" case DELETE:","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" delete(tasks, storage);","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" * Retrieves an empty string as test data associated with ManageCommand.","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * @return An empty string used for testing.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public String getTestData() {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" return \"\";","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * Marks the task at the specified index as done, updating its status in the task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which the task is marked.","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" public void mark(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" if (index \u003e\u003d tasks.getSize() || index \u003c 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Oops! You did not give a valid index.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" Task task \u003d tasks.getTask(this.index);","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" task.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" String line \u003d storage.readLine(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" String newLine \u003d line.substring(0, line.length() - 5) + \"true\";","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" storage.updateLine(index, newLine);","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" storage.updateLine(index, newLine);","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidStatusUpdateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" UI.print(\"This task was already marked!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" * Unmarks the task at the specified index, updating its status in the task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which the task is unmarked.","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" public void unmark(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":" if (index \u003e\u003d tasks.getSize() || index \u003c 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Oops! You did not give a valid index.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" task.updateStatus(false);","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" UI.print(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" String line \u003d storage.readLine(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" String newLine \u003d line.substring(0, line.length() - 4) + \"false\";","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" storage.updateLine(index, newLine);","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidStatusUpdateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" UI.print(\"This task was already unmarked!\");","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"alfaloo"},"content":" * Deletes the task at the specified index, removing it from the task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which the task is deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"alfaloo"},"content":" public void delete(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"alfaloo"},"content":" if (index \u003e\u003d tasks.getSize() || index \u003c 0) {","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Oops! You did not give a valid index.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"alfaloo"},"content":" return;","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"alfaloo"},"content":" Task removed \u003d tasks.deleteTask(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"alfaloo"},"content":" storage.deleteLine(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"alfaloo"},"content":" UI.print(\"\\t\" + removed);","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"alfaloo"},"content":" UI.print(String.format(\"Now you have %d tasks in the list.\", tasks.getSize()));","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":137}},{"path":"src/main/java/command/QueryCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package command;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Deadline;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import task.Event;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import storage.Storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * The QueryCommand class represents a command to query tasks based on type and date.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" * It extends the Command class and implements the execute method to perform the specified query action.","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"public class QueryCommand extends Command {","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" * The type of query command.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" private Command.Types commandType;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" * The type of task to be queried (deadline, event).","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" private String query;","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" * The date used for querying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" private LocalDate date;","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" * Constructs a QueryCommand with the specified command type, query type, and date.","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * @param commandType The type of query command.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * @param query The type of task to be queried (deadline, event).","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" * @param date The date used for querying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" public QueryCommand(Command.Types commandType, String query, LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" this.query \u003d query;","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" this.date \u003d date;","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" * Executes the QueryCommand, performing the specified query action on the given task list and storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList on which the query action is performed.","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" * @param storage The Storage where changes are saved.","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" public void execute(TaskList tasks, Storage storage) {","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" switch (this.commandType) {","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" case QUERY:","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" query(tasks);","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" case FIND:","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" find(tasks);","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" break;","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" * Retrieves the query type as test data associated with QueryCommand.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * @return The query type used for testing.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" public String getTestData() {","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" return this.query;","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" * Finds tasks based on the specified query type and date, printing the results to the UI.","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which tasks are queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" public void query(TaskList tasks) {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" String formattedDate \u003d this.date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" if (this.query.equals(\"deadline\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Below are deadlines that are due on \" + formattedDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" for (Task task : tasks.fetchAll()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" if (task instanceof Deadline \u0026\u0026 task.queryByDate(this.date)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" } else if (this.query.equals(\"event\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Below are events that are operating on \" + formattedDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" for (Task task : tasks.fetchAll()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" if (task instanceof Event \u0026\u0026 task.queryByDate(date)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" UI.print(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Could not query given task type\");","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" * Finds and prints tasks in the task list that match the specified query.","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList from which tasks are queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" public void find(TaskList tasks) {","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" int index \u003d 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" for (Task task : tasks.fetchAll()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" if (task.getName().contains(this.query)) {","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" UI.print(index + \".\" + task);","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":117}},{"path":"src/main/java/data/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"todo todo1","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"deadline deadline1 /by 2023-01-02","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"event event1 /from 2022-03-04 /to 2024-05-06","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"todo todo2","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":4}},{"path":"src/main/java/data/lulu.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"todo,todo1,false","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"event,event1,2022-03-04,2024-05-06,false","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"todo,bye,true","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"todo,great day,false","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"todo,great week,false","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"todo,thats great,false","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":6}},{"path":"src/main/java/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidCommandException extends LuluException {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidCommandException() {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Could not decipher input string\");","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/InvalidDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidDateException extends LuluException{","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidDateException() {","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Invalid date detected\");","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/InvalidSlashParameterException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidSlashParameterException extends LuluException {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidSlashParameterException() {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Could not decipher command after slash\");","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/InvalidStatusUpdateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class InvalidStatusUpdateException extends LuluException {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public InvalidStatusUpdateException() {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(\"Status was already updated to desired value\");","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/exceptions/LuluException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package exceptions;","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"public class LuluException extends Exception {","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" public LuluException(String message) {","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" super(message);","lastModifiedDate":"2024-01-23"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":7}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Deadline;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import task.Event;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import task.Todo;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import command.AddCommand;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import command.ManageCommand;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import command.QueryCommand;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import exceptions.LuluException;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidCommandException;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidDateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidSlashParameterException;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * The Parser class is responsible for parsing user input and creating corresponding Command objects.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" * It includes methods for parsing various commands such as adding, managing, and querying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":"public class Parser {","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * Parses the input string and creates the corresponding Command object.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" * @return The Command object based on the parsed input.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" public Command parse(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" String firstWord \u003d input.split(\" \")[0];","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" if (input.toLowerCase().equals(\"list\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.LIST, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"mark\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.MARK, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"unmark\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.UNMARK, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"delete\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.DELETE, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" return addTasks(Command.Types.TODO, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" return addTasks(Command.Types.DEADLINE, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"event\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" return addTasks(Command.Types.EVENT, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"query\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.QUERY, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" } else if (firstWord.equals(\"find\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" return manageTasks(Command.Types.FIND, input);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" } else {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" * Creates a ManageCommand object based on the specified command type and input.","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" * @param command The type of ManageCommand (MARK, UNMARK, DELETE, FIND).","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public Command manageTasks(Command.Types command, String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" switch (command) {","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" case MARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" return mark(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" case UNMARK:","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" return unmark(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" case DELETE:","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" return delete(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" case QUERY:","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" return query(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" case FIND:","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" return find(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" * Creates an AddCommand object based on the specified command type and input.","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" * @param command The type of AddCommand (TODO, DEADLINE, EVENT).","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" public Command addTasks(Command.Types command, String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" switch (command) {","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" case TODO:","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" return todo(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" return deadline(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" case EVENT:","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" return event(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" default:","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a MARK command and creates the corresponding ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object for marking a task.","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" public Command mark(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" int index \u003d Integer.valueOf(words[1]) - 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" return new ManageCommand(Command.Types.MARK, index);","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for an UNMARK command and creates the corresponding ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object for unmarking a task.","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"alfaloo"},"content":" public Command unmark(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"alfaloo"},"content":" int index \u003d Integer.valueOf(words[1]) - 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"alfaloo"},"content":" return new ManageCommand(Command.Types.UNMARK, index);","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a DELETE command and creates the corresponding ManageCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":138,"author":{"gitId":"alfaloo"},"content":" * @return The ManageCommand object for deleting a task.","lastModifiedDate":"2024-01-27"},{"lineNumber":139,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":140,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":141,"author":{"gitId":"alfaloo"},"content":" public Command delete(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":142,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":143,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":144,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":145,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":146,"author":{"gitId":"alfaloo"},"content":" int index \u003d Integer.valueOf(words[1]) - 1;","lastModifiedDate":"2024-01-27"},{"lineNumber":147,"author":{"gitId":"alfaloo"},"content":" return new ManageCommand(Command.Types.DELETE, index);","lastModifiedDate":"2024-01-27"},{"lineNumber":148,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":149,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":150,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":151,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a FIND command and creates the corresponding QueryCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":152,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":153,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":154,"author":{"gitId":"alfaloo"},"content":" * @return The QueryCommand object for finding tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":155,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":156,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":157,"author":{"gitId":"alfaloo"},"content":" public Command query(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":158,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":159,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 2) {","lastModifiedDate":"2024-01-27"},{"lineNumber":160,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":161,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":162,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":163,"author":{"gitId":"alfaloo"},"content":" String taskType \u003d words[1].toLowerCase();","lastModifiedDate":"2024-01-27"},{"lineNumber":164,"author":{"gitId":"alfaloo"},"content":" LocalDate date \u003d LocalDate.parse(words[2]);","lastModifiedDate":"2024-01-27"},{"lineNumber":165,"author":{"gitId":"alfaloo"},"content":" return new QueryCommand(Command.Types.QUERY, taskType, date);","lastModifiedDate":"2024-01-27"},{"lineNumber":166,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":167,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":168,"author":{"gitId":"alfaloo"},"content":" public Command find(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":169,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d input.split(\" \");","lastModifiedDate":"2024-01-27"},{"lineNumber":170,"author":{"gitId":"alfaloo"},"content":" if (words.length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":171,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":172,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":173,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":174,"author":{"gitId":"alfaloo"},"content":" String queryString \u003d words[1].toLowerCase();","lastModifiedDate":"2024-01-27"},{"lineNumber":175,"author":{"gitId":"alfaloo"},"content":" return new QueryCommand(Command.Types.FIND, queryString, null);","lastModifiedDate":"2024-01-27"},{"lineNumber":176,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":177,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":178,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":179,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a TODO command and creates the corresponding AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":180,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":181,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":182,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object for adding a Todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":183,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":184,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":185,"author":{"gitId":"alfaloo"},"content":" public Command todo(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":186,"author":{"gitId":"alfaloo"},"content":" if (input.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":187,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":188,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":189,"author":{"gitId":"alfaloo"},"content":" String name \u003d input.substring(5).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":190,"author":{"gitId":"alfaloo"},"content":" Todo todo \u003d new Todo(name);","lastModifiedDate":"2024-01-27"},{"lineNumber":191,"author":{"gitId":"alfaloo"},"content":" String data \u003d String.format(\"todo,%s,%b\", name, todo.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":192,"author":{"gitId":"alfaloo"},"content":" Command command \u003d new AddCommand(todo, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":193,"author":{"gitId":"alfaloo"},"content":" return command;","lastModifiedDate":"2024-01-27"},{"lineNumber":194,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":195,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":196,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":197,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for a DEADLINE command and creates the corresponding AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":198,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":199,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":200,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object for adding a Deadline task.","lastModifiedDate":"2024-01-27"},{"lineNumber":201,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":202,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":203,"author":{"gitId":"alfaloo"},"content":" public Command deadline(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":204,"author":{"gitId":"alfaloo"},"content":" if (input.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":205,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":206,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":207,"author":{"gitId":"alfaloo"},"content":" int indexBy \u003d input.indexOf(\u0027/\u0027);","lastModifiedDate":"2024-01-27"},{"lineNumber":208,"author":{"gitId":"alfaloo"},"content":" if (!input.substring(indexBy + 1).split(\" \")[0].equals(\"by\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":209,"author":{"gitId":"alfaloo"},"content":" throw new InvalidSlashParameterException();","lastModifiedDate":"2024-01-27"},{"lineNumber":210,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":211,"author":{"gitId":"alfaloo"},"content":" String name \u003d input.substring(9, indexBy).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":212,"author":{"gitId":"alfaloo"},"content":" String by \u003d input.substring(indexBy + 3).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":213,"author":{"gitId":"alfaloo"},"content":" Deadline deadline \u003d new Deadline(name, LocalDate.parse(by));","lastModifiedDate":"2024-01-27"},{"lineNumber":214,"author":{"gitId":"alfaloo"},"content":" String data \u003d String.format(\"deadline,%s,%s,%b\", name, by, deadline.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":215,"author":{"gitId":"alfaloo"},"content":" Command command \u003d new AddCommand(deadline, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":216,"author":{"gitId":"alfaloo"},"content":" return command;","lastModifiedDate":"2024-01-27"},{"lineNumber":217,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":218,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":219,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":220,"author":{"gitId":"alfaloo"},"content":" * Parses the input string for an EVENT command and creates the corresponding AddCommand object.","lastModifiedDate":"2024-01-27"},{"lineNumber":221,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":222,"author":{"gitId":"alfaloo"},"content":" * @param input The user input string.","lastModifiedDate":"2024-01-27"},{"lineNumber":223,"author":{"gitId":"alfaloo"},"content":" * @return The AddCommand object for adding an Event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":224,"author":{"gitId":"alfaloo"},"content":" * @throws LuluException If an error occurs during parsing.","lastModifiedDate":"2024-01-27"},{"lineNumber":225,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":226,"author":{"gitId":"alfaloo"},"content":" public Command event(String input) throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":227,"author":{"gitId":"alfaloo"},"content":" if (input.split(\" \").length \u003c\u003d 1) {","lastModifiedDate":"2024-01-27"},{"lineNumber":228,"author":{"gitId":"alfaloo"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2024-01-27"},{"lineNumber":229,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":230,"author":{"gitId":"alfaloo"},"content":" int indexFrom \u003d input.indexOf(\u0027/\u0027);","lastModifiedDate":"2024-01-27"},{"lineNumber":231,"author":{"gitId":"alfaloo"},"content":" int indexTo \u003d input.indexOf(\u0027/\u0027, indexFrom + 1);","lastModifiedDate":"2024-01-27"},{"lineNumber":232,"author":{"gitId":"alfaloo"},"content":" if (!input.substring(indexFrom + 1).split(\" \")[0].equals(\"from\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":233,"author":{"gitId":"alfaloo"},"content":" throw new InvalidSlashParameterException();","lastModifiedDate":"2024-01-27"},{"lineNumber":234,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":235,"author":{"gitId":"alfaloo"},"content":" if (!input.substring(indexTo + 1).split(\" \")[0].equals(\"to\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":236,"author":{"gitId":"alfaloo"},"content":" throw new InvalidSlashParameterException();","lastModifiedDate":"2024-01-27"},{"lineNumber":237,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":238,"author":{"gitId":"alfaloo"},"content":" String name \u003d input.substring(6, indexFrom).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":239,"author":{"gitId":"alfaloo"},"content":" String from \u003d input.substring(indexFrom + 5, indexTo).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":240,"author":{"gitId":"alfaloo"},"content":" String to \u003d input.substring(indexTo + 3).strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":241,"author":{"gitId":"alfaloo"},"content":" if (LocalDate.parse(to).isBefore(LocalDate.parse(from))) {","lastModifiedDate":"2024-01-27"},{"lineNumber":242,"author":{"gitId":"alfaloo"},"content":" throw new InvalidDateException();","lastModifiedDate":"2024-01-27"},{"lineNumber":243,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":244,"author":{"gitId":"alfaloo"},"content":" Event event \u003d new Event(name, LocalDate.parse(from), LocalDate.parse(to));","lastModifiedDate":"2024-01-27"},{"lineNumber":245,"author":{"gitId":"alfaloo"},"content":" String data \u003d String.format(\"event,%s,%s,%s,%b\", name, from, to, event.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":246,"author":{"gitId":"alfaloo"},"content":" Command command \u003d new AddCommand(event, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":247,"author":{"gitId":"alfaloo"},"content":" return command;","lastModifiedDate":"2024-01-27"},{"lineNumber":248,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":249,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":249}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package storage;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.io.File;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import java.nio.file.Files;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import java.nio.file.Path;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * The Storage class handles reading from and writing to a file for data persistence.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" * It provides methods for retrieving lines, writing a line, reading a line by index,","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * updating a line, and deleting a line from the stored data.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":"public class Storage {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" /** The file path for data storage. */","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" private String filePath;","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /** The File object representing the file for data storage. */","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" private File file;","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" /** The Path object representing the file path. */","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" private Path path;","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" * Constructs a Storage object with the specified file path.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" * Initializes the File and Path objects for data storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" * @param filePath The path to the file for data storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" this.path \u003d Path.of(this.filePath);","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" * Retrieves all lines from the stored data in the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" * @return A List of strings representing the lines from the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" public List\u003cString\u003e retrieveLines() {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" List\u003cString\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" result.add(scanner.nextLine());","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Invalid file path provided, session will not be saved.\");","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" return result;","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * Writes a line of data to the file for data storage.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" * @param data The data to be written to the file.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public void writeLine(String data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.file, true));","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" writer.write(data);","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" writer.newLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" writer.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" * Reads a line from the stored data based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the line to be read.","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" * @return The string representing the line at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" public String readLine(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" Scanner scanner \u003d new Scanner(this.file);","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" int i \u003d 0;","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" String line \u003d \"\";","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" line \u003d scanner.nextLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" if (i \u003d\u003d index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" return line;","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" i++;","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" return null;","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" * Updates a line in the stored data based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the line to be updated.","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":" * @param data The updated data to replace the existing line.","lastModifiedDate":"2024-01-27"},{"lineNumber":102,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":103,"author":{"gitId":"alfaloo"},"content":" public void updateLine(int index, String data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":104,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":105,"author":{"gitId":"alfaloo"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(this.path);","lastModifiedDate":"2024-01-27"},{"lineNumber":106,"author":{"gitId":"alfaloo"},"content":" lines.set(index, data);","lastModifiedDate":"2024-01-27"},{"lineNumber":107,"author":{"gitId":"alfaloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.file, false));","lastModifiedDate":"2024-01-27"},{"lineNumber":108,"author":{"gitId":"alfaloo"},"content":" writer.write(\"\");","lastModifiedDate":"2024-01-27"},{"lineNumber":109,"author":{"gitId":"alfaloo"},"content":" writer \u003d new BufferedWriter(new FileWriter(this.file, true));","lastModifiedDate":"2024-01-27"},{"lineNumber":110,"author":{"gitId":"alfaloo"},"content":" for (String str : lines) {","lastModifiedDate":"2024-01-27"},{"lineNumber":111,"author":{"gitId":"alfaloo"},"content":" writer.write(str);","lastModifiedDate":"2024-01-27"},{"lineNumber":112,"author":{"gitId":"alfaloo"},"content":" writer.newLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":113,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":114,"author":{"gitId":"alfaloo"},"content":" writer.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":115,"author":{"gitId":"alfaloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":116,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":117,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":118,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":119,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":120,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":121,"author":{"gitId":"alfaloo"},"content":" * Deletes a line from the stored data based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":122,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the line to be deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":123,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":124,"author":{"gitId":"alfaloo"},"content":" public void deleteLine(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":125,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":126,"author":{"gitId":"alfaloo"},"content":" List\u003cString\u003e lines \u003d Files.readAllLines(this.path);","lastModifiedDate":"2024-01-27"},{"lineNumber":127,"author":{"gitId":"alfaloo"},"content":" lines.remove(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":128,"author":{"gitId":"alfaloo"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.file, false));","lastModifiedDate":"2024-01-27"},{"lineNumber":129,"author":{"gitId":"alfaloo"},"content":" writer.write(\"\");","lastModifiedDate":"2024-01-27"},{"lineNumber":130,"author":{"gitId":"alfaloo"},"content":" writer \u003d new BufferedWriter(new FileWriter(this.file, true));","lastModifiedDate":"2024-01-27"},{"lineNumber":131,"author":{"gitId":"alfaloo"},"content":" for (String str : lines) {","lastModifiedDate":"2024-01-27"},{"lineNumber":132,"author":{"gitId":"alfaloo"},"content":" writer.write(str);","lastModifiedDate":"2024-01-27"},{"lineNumber":133,"author":{"gitId":"alfaloo"},"content":" writer.newLine();","lastModifiedDate":"2024-01-27"},{"lineNumber":134,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":135,"author":{"gitId":"alfaloo"},"content":" writer.close();","lastModifiedDate":"2024-01-27"},{"lineNumber":136,"author":{"gitId":"alfaloo"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":137,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":138,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":139,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":140,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":140}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The Deadline class represents a task with a specific end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It extends the Task class and includes methods to query by date and provide a formatted string representation.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" /** The end date of the deadline. */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" private LocalDate endDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * Constructs a Deadline task with the specified name and end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * @param endDate The end date of the deadline.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" public Deadline(String name, LocalDate endDate) {","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" super(name);","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2024-01-22"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * Queries whether the deadline occurs on the specified date.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" * @param date The date to be queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" * @return true if the deadline occurs on the specified date, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public boolean queryByDate(LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" return date.isEqual(this.endDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" * Provides a formatted string representation of the Deadline task.","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * @return A string representing the Deadline task in a readable format.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" String by \u003d this.endDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" return String.format(\"[D]%s %s (by: %s)\", (super.isMarked ? \"[X]\" : \"[ ]\"), super.name, by);","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":45}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.format.FormatStyle;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The Event class represents a task with a start date and an end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It extends the Task class and includes methods to query by date and provide a formatted string representation.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" /** The start date of the event. */","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" private LocalDate startDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" /** The end date of the event. */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" private LocalDate endDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" * Constructs an Event task with the specified name, start date, and end date.","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * @param startDate The start date of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" * @param endDate The end date of the event.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" public Event(String name, LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" super(name);","lastModifiedDate":"2024-01-22"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" * Queries whether the event occurs on the specified date.","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" * @param date The date to be queried.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" * @return true if the event occurs on the specified date, false otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" public boolean queryByDate(LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" return (date.isAfter(this.startDate) \u0026\u0026 date.isBefore(this.endDate)) || date.isEqual(this.startDate) || date.isEqual(this.endDate);","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" * Provides a formatted string representation of the Event task.","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" * @return A string representing the Event task in a readable format.","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" String from \u003d this.startDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" String to \u003d this.endDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", (super.isMarked ? \"[X]\" : \"[ ]\"), super.name, from, to);","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":50}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidStatusUpdateException;","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-23"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The {@code Task} class represents a generic task with a name and a status.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It provides methods to update the task\u0027s status, get the task\u0027s name,","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" * get the task\u0027s status, query the task by date, and retrieve a string","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" * representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"public class Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" /** The name of the task. */","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" protected String name;","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" /** The status of the task (marked or unmarked). */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" protected boolean isMarked;","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * Constructs a new task with the specified name and initializes","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" * its status as unmarked.","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-22"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-22"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" * Updates the status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" * @param status The new status of the task (true if marked, false if unmarked).","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" * @throws InvalidStatusUpdateException If the new status is the same as the current status.","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" public void updateStatus(boolean status) throws InvalidStatusUpdateException {","lastModifiedDate":"2024-01-23"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" if (this.isMarked \u003d\u003d status) {","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" throw new InvalidStatusUpdateException();","lastModifiedDate":"2024-01-23"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-23"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" this.isMarked \u003d status;","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" * Gets the name of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" * @return The name of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" public String getName() {","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" return this.name;","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" * Gets the status of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" * @return The status of the task (true if marked, false if unmarked).","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" public boolean getStatus() {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" return this.isMarked;","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" * Queries the task by date. This method is overridden by subclasses.","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" * @param date The date to query.","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":" * @return {@code true} if the task is relevant to the specified date, {@code false} otherwise.","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" public boolean queryByDate(LocalDate date) {","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" return false;","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" *","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":" * @return A string representation of the task.","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" return \"[T]\" + (this.isMarked ? \"[X] \" : \"[ ] \") + this.name;","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":82}},{"path":"src/main/java/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":" * The Todo class represents a simple task without a specific date.","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":" * It extends the Task class and provides a formatted string representation.","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"public class Todo extends Task {","lastModifiedDate":"2024-01-22"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" * Constructs a Todo task with the specified name.","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":" * @param name The name of the todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" public Todo(String name) {","lastModifiedDate":"2024-01-22"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" super(name);","lastModifiedDate":"2024-01-22"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-22"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" * Provides a formatted string representation of the Todo task.","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" * @return A string representing the Todo task in a readable format.","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" @Override","lastModifiedDate":"2024-01-22"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" public String toString() {","lastModifiedDate":"2024-01-22"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" return \"[T]\" + (super.isMarked ? \"[X] \" : \"[ ] \") + super.name;","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-22"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-22"}],"authorContributionMap":{"alfaloo":25}},{"path":"src/main/java/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package tasklist;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import task.Deadline;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import task.Event;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import task.Task;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import task.Todo;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import ui.UI;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidStatusUpdateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"import java.util.List;","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" * The TaskList class manages a list of tasks and provides methods","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" * to add, retrieve, delete, and fetch tasks from the list.","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":"public class TaskList {","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /** The list of tasks managed by the TaskList. */","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" * Constructs a TaskList based on the data provided.","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" * Parses the input data and initializes the list of tasks accordingly.","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" * @param data The list of strings representing task data.","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" public TaskList(List\u003cString\u003e data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" for (String line : data) {","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" String[] words \u003d line.split(\",\");","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" try {","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" if (words[0].equals(\"todo\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" Todo todo \u003d new Todo(words[1]);","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" if (words[2].equals(\"true\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" todo.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" this.tasks.add(todo);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" } else if (words[0].equals(\"deadline\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" Deadline deadline \u003d new Deadline(words[1], LocalDate.parse(words[2]));","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" if (words[3].equals(\"true\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" deadline.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" } else if (words[0].equals(\"event\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" Event event \u003d new Event(words[1], LocalDate.parse(words[2]), LocalDate.parse(words[3]));","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" if (words[4].equals(\"true\")) {","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" event.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" this.tasks.add(event);","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" } catch (InvalidStatusUpdateException e) {","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" UI.print(e.getMessage());","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" * @param task The task to be added.","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":" * @return true if the task is successfully added.","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":" return this.tasks.add(task);","lastModifiedDate":"2024-01-27"},{"lineNumber":66,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":67,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":68,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":69,"author":{"gitId":"alfaloo"},"content":" * Retrieves a task from the TaskList based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":70,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2024-01-27"},{"lineNumber":71,"author":{"gitId":"alfaloo"},"content":" * @return The task at the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":72,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":73,"author":{"gitId":"alfaloo"},"content":" public Task getTask(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":74,"author":{"gitId":"alfaloo"},"content":" return this.tasks.get(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":75,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":76,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":77,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":78,"author":{"gitId":"alfaloo"},"content":" * Deletes a task from the TaskList based on the specified index.","lastModifiedDate":"2024-01-27"},{"lineNumber":79,"author":{"gitId":"alfaloo"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2024-01-27"},{"lineNumber":80,"author":{"gitId":"alfaloo"},"content":" * @return The task that was removed from the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":81,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":82,"author":{"gitId":"alfaloo"},"content":" public Task deleteTask(int index) {","lastModifiedDate":"2024-01-27"},{"lineNumber":83,"author":{"gitId":"alfaloo"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2024-01-27"},{"lineNumber":84,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":85,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":86,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":87,"author":{"gitId":"alfaloo"},"content":" * Gets the number of tasks in the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":88,"author":{"gitId":"alfaloo"},"content":" * @return The size of the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":89,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":90,"author":{"gitId":"alfaloo"},"content":" public int getSize() {","lastModifiedDate":"2024-01-27"},{"lineNumber":91,"author":{"gitId":"alfaloo"},"content":" return this.tasks.size();","lastModifiedDate":"2024-01-27"},{"lineNumber":92,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":93,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":94,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":95,"author":{"gitId":"alfaloo"},"content":" * Fetches all tasks from the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":96,"author":{"gitId":"alfaloo"},"content":" * @return A List containing all tasks in the TaskList.","lastModifiedDate":"2024-01-27"},{"lineNumber":97,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":98,"author":{"gitId":"alfaloo"},"content":" public List\u003cTask\u003e fetchAll() {","lastModifiedDate":"2024-01-27"},{"lineNumber":99,"author":{"gitId":"alfaloo"},"content":" return this.tasks;","lastModifiedDate":"2024-01-27"},{"lineNumber":100,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":101,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":101}},{"path":"src/main/java/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package ui;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import tasklist.TaskList;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"/**","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":" * The UI class responsible for handling user interface interactions.","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":" * It provides methods for printing messages, reading user input, and displaying tasks.","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class UI {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" * Prints the specified text to the console with an indentation.","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" * @param text The text to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" public static void print(Object text) {","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" System.out.println(\"\\t\" + text.toString());","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" * Initiates the Lulu application.","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" * Prints a welcome message to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" public static void start() {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Hello! I\u0027m Lulu \\n\\tWhat can I do for you?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":" * Exits the Lulu application.","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" * Prints a goodbye message to the user.","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" public static void exit() {","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":" * Reads the next line of input from the user.","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" * @return A String representing the user\u0027s input with leading and trailing whitespaces removed.","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" public static String nextLine() {","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" return scanner.nextLine().strip();","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" /**","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" * Prints the tasks in the provided TaskList with indices.","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" * @param tasks The TaskList containing tasks to be printed.","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" */","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" public static void printTasks(TaskList tasks) {","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" UI.print(\"Here are the tasks in your list:\");","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" String output \u003d (i + 1) + \".\" + tasks.getTask(i);","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" UI.print(output);","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":57}},{"path":"src/test/java/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package parser;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidCommandException;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidDateException;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import exceptions.InvalidSlashParameterException;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import exceptions.LuluException;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":"public class ParserTest {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":" public void test1() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 /to 2024-05-06\";","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" assertEquals(\"event,event1,2022-03-04,2024-05-06,false\", command.getTestData());","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" public void test2() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 /to 2022-03-04\";","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" assertEquals(\"event,event1,2022-03-04,2022-03-04,false\", command.getTestData());","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" public void test3() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"find deadline 2023-01-02\";","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" assertEquals(\"deadline\", command.getTestData());","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" public void test4() {","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 /to 2021-03-04\";","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidDateException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" public void test5() {","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event\";","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidCommandException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":" public void test6() {","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" String input \u003d \"event event1 /from 2022-03-04 / 2023-03-04\";","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidSlashParameterException.class, () -\u003e parser.parse(input));","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":59}},{"path":"src/test/java/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"package task;","lastModifiedDate":"2024-01-27"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"import exceptions.*;","lastModifiedDate":"2024-01-27"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-01-27"},{"lineNumber":5,"author":{"gitId":"alfaloo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2024-01-27"},{"lineNumber":6,"author":{"gitId":"alfaloo"},"content":"import command.Command;","lastModifiedDate":"2024-01-27"},{"lineNumber":7,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":8,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-01-27"},{"lineNumber":9,"author":{"gitId":"alfaloo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2024-01-27"},{"lineNumber":10,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":11,"author":{"gitId":"alfaloo"},"content":"public class TaskTest {","lastModifiedDate":"2024-01-27"},{"lineNumber":12,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":13,"author":{"gitId":"alfaloo"},"content":" public void test1() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Todo(\"test1\");","lastModifiedDate":"2024-01-27"},{"lineNumber":15,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":" assertEquals(false, task.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":19,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":20,"author":{"gitId":"alfaloo"},"content":" public void test2() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":21,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Todo(\"test2\");","lastModifiedDate":"2024-01-27"},{"lineNumber":22,"author":{"gitId":"alfaloo"},"content":" task.updateStatus(true);","lastModifiedDate":"2024-01-27"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":24,"author":{"gitId":"alfaloo"},"content":" assertEquals(true, task.getStatus());","lastModifiedDate":"2024-01-27"},{"lineNumber":25,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":26,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":27,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":28,"author":{"gitId":"alfaloo"},"content":" public void test3() throws LuluException {","lastModifiedDate":"2024-01-27"},{"lineNumber":29,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Todo(\"test3\");","lastModifiedDate":"2024-01-27"},{"lineNumber":30,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":31,"author":{"gitId":"alfaloo"},"content":" assertThrows(InvalidStatusUpdateException.class, () -\u003e task.updateStatus(false));","lastModifiedDate":"2024-01-27"},{"lineNumber":32,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":33,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":34,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":35,"author":{"gitId":"alfaloo"},"content":" public void test4() {","lastModifiedDate":"2024-01-27"},{"lineNumber":36,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Deadline(\"test4\", LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":37,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":38,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":39,"author":{"gitId":"alfaloo"},"content":" assertEquals(true, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":40,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":41,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":42,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":43,"author":{"gitId":"alfaloo"},"content":" public void test5() {","lastModifiedDate":"2024-01-27"},{"lineNumber":44,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Deadline(\"test5\", LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":45,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2021-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":46,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":47,"author":{"gitId":"alfaloo"},"content":" assertEquals(false, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":48,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":49,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":50,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":51,"author":{"gitId":"alfaloo"},"content":" public void test6() {","lastModifiedDate":"2024-01-27"},{"lineNumber":52,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Event(\"test6\", LocalDate.parse(\"2020-01-01\"), LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":53,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2021-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":54,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":55,"author":{"gitId":"alfaloo"},"content":" assertEquals(true, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":56,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":57,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":58,"author":{"gitId":"alfaloo"},"content":" @Test","lastModifiedDate":"2024-01-27"},{"lineNumber":59,"author":{"gitId":"alfaloo"},"content":" public void test7() {","lastModifiedDate":"2024-01-27"},{"lineNumber":60,"author":{"gitId":"alfaloo"},"content":" Task task \u003d new Event(\"test7\", LocalDate.parse(\"2021-01-01\"), LocalDate.parse(\"2022-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":61,"author":{"gitId":"alfaloo"},"content":" boolean query \u003d task.queryByDate(LocalDate.parse(\"2020-01-01\"));","lastModifiedDate":"2024-01-27"},{"lineNumber":62,"author":{"gitId":"alfaloo"},"content":"","lastModifiedDate":"2024-01-27"},{"lineNumber":63,"author":{"gitId":"alfaloo"},"content":" assertEquals(false, query);","lastModifiedDate":"2024-01-27"},{"lineNumber":64,"author":{"gitId":"alfaloo"},"content":" }","lastModifiedDate":"2024-01-27"},{"lineNumber":65,"author":{"gitId":"alfaloo"},"content":"}","lastModifiedDate":"2024-01-27"}],"authorContributionMap":{"alfaloo":65}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alfaloo"},"content":"todo borrow book","lastModifiedDate":"2024-01-23"},{"lineNumber":2,"author":{"gitId":"alfaloo"},"content":"list","lastModifiedDate":"2024-01-23"},{"lineNumber":3,"author":{"gitId":"alfaloo"},"content":"deadline return book /by Sunday","lastModifiedDate":"2024-01-23"},{"lineNumber":4,"author":{"gitId":"alfaloo"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2024-01-23"}],"authorContributionMap":{"alfaloo":4}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"alfaloo"},"content":"java -classpath ../bin Lulu \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-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":{"alfaloo":1,"-":37}}] diff --git a/alfaloo_ip_master/commits.json b/alfaloo_ip_master/commits.json index a1da492e..8e69ec60 100644 --- a/alfaloo_ip_master/commits.json +++ b/alfaloo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"alfaloo":[{"date":"2024-01-22","commitResults":[{"hash":"eb59145e3996f1f38f9d1042e66b010e8b146f2f","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"35e97ba6af98f214bdc1af59aba82cdd7d7bfdb1","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"aced5fdac38144e7a3086fc7fd51a5b723f1a07c","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"352867d8e82df2fc92aba1648fb2fcf4b8466084","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"447af0bbfe23a39b5b8de85c2224433139c5b992","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"6f583dab214e70e60a12f2588d70322c3f147ddd","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"dc97a1a1ae54ed16a4955f41b1bd50df14cc421a","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"511efb1141be95db7304539921953d604de777f9","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"ae642eb5d9e0c4f50da643ce0edd1fc27f42fb40","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":4}}},{"hash":"53f4c4fcf4e454c7fc28b96245cf56af7e2a3127","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":22}}},{"hash":"24886419f521b717f3ae24e52530ef8ebc4b2dfd","isMergeCommit":false,"messageTitle":"message","messageBody":"","tags":["Level-4","A-Inheritance","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":13}}}]},{"date":"2024-01-23","commitResults":[{"hash":"cd5f1e9a11c67d2c10ed8081b94728233de03ea1","isMergeCommit":false,"messageTitle":"testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"a894a9937d9143116278b89dbe26e3de74ff8633","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"6ca5ce2da16c02b8964bd25f6ebda6696dbe5cd4","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":107}}},{"hash":"896985b6389b044e4ceb9e319cd8cabf7ea3e6a9","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"7447ba30326c81537bd96fa1f2b13910ef12720f","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"073e6f6322d01a493cdee470458cc9937309e696","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d42631012ff8094a94146ac0022ccea7766cb2fa","isMergeCommit":false,"messageTitle":"A-Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"4943b1dc78fc9c10c99081a9e5bec9d2920adfa2","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":4}}},{"hash":"4f70ce18038c40b7da78ce6b93f0e0ef52204d73","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fea78b9c32c32c3c24cd8cc61343e05babc769a2","isMergeCommit":false,"messageTitle":"A-Exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9377b56090b9975bae2942015edf504594c75f62","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":25}}},{"hash":"ba1fb56fd3128fab7605bba2b505a4998b7cf0c2","isMergeCommit":false,"messageTitle":"A-Collections","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":34}}},{"hash":"de60be8d13e41fe723a87cdbf1ce547ca95035eb","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":12}}}]},{"date":"2024-01-27","commitResults":[{"hash":"a59d7fcacea52916a5922635315313830fd98194","isMergeCommit":false,"messageTitle":"implement save to file when adding new task","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":95,"deletions":2}}},{"hash":"315716a74ed4d90f80752698499a9573d8d6742b","isMergeCommit":false,"messageTitle":"implement save for mark, unmark, and delete","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":4},"java":{"insertions":62,"deletions":20}}},{"hash":"adee5353b63f1fd9421efbd248e53c1adb2cbaf8","isMergeCommit":false,"messageTitle":"minor changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"adcedb0d97a1415b9cb4f2471cf3442d20418c0d","isMergeCommit":true,"messageTitle":"merge branch-Level-7 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c6cc85dcf6e9dd764b2de656f428f00961981071","isMergeCommit":false,"messageTitle":"add LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":12},"java":{"insertions":23,"deletions":11}}},{"hash":"0d64fd08084914f8a3d3d0ab4ba7402112e248d5","isMergeCommit":true,"messageTitle":"merge branch-Level-8 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"4485266bb8b74ce37fe152c7612557acedfeceba","isMergeCommit":false,"messageTitle":"add queryByTime feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":82,"deletions":23}}},{"hash":"f17fd204b8bb64a812b34def8dcc7fde53c18467","isMergeCommit":false,"messageTitle":"made structure more oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":574,"deletions":394}}},{"hash":"0e5cb8f0f20b17aa52c33dce45bc83bcc0aa92d5","isMergeCommit":false,"messageTitle":"separate code into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}},{"hash":"fdbefc0f881e204f6f776ab2c477c6b990665fce","isMergeCommit":true,"messageTitle":"merge gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4e1527498e40ebf891905a7c49a341dbbffd6c66","isMergeCommit":false,"messageTitle":"implement jUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":1}}},{"hash":"c6f803904f22199a00f0a530d1a1cb606ebf3a77","isMergeCommit":false,"messageTitle":"create jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":0}}},{"hash":"7e11927c1e892c82f47e39c49ed3a5ac0e6e0c2f","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":390,"deletions":27}}},{"hash":"e5a993a99616b0c27bf0a156d3a4ccfc7fd04bc5","isMergeCommit":false,"messageTitle":"fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"4149c76112548eb5a167fa158a6f514c5844131a","isMergeCommit":false,"messageTitle":"minor changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7658d18ba781954796865e90ec7b3f7d887450ec","isMergeCommit":false,"messageTitle":"implement find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":113,"deletions":18}}},{"hash":"f444957dab367c63705747612d8d216905925285","isMergeCommit":true,"messageTitle":"merge with branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"ce4ae59cc65d264881b29163939f315440a11dfd","isMergeCommit":true,"messageTitle":"merge with branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b2a9685208bcaad804a9e0ea649463c003addfe8","isMergeCommit":true,"messageTitle":"merge with branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"dcac5f0fc991332b77337f30d315739d45aecf2e","isMergeCommit":false,"messageTitle":"minor change","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"alfaloo":{"java":1345,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":2,"txt":14}},"authorContributionVariance":{"alfaloo":419603.75},"authorDisplayNameMap":{"alfaloo":"CS2103T-T15-1 LU Z..YANG"}} +{"authorDailyContributionsMap":{"alfaloo":[{"date":"2024-01-22","commitResults":[{"hash":"eb59145e3996f1f38f9d1042e66b010e8b146f2f","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"35e97ba6af98f214bdc1af59aba82cdd7d7bfdb1","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"aced5fdac38144e7a3086fc7fd51a5b723f1a07c","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"352867d8e82df2fc92aba1648fb2fcf4b8466084","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"447af0bbfe23a39b5b8de85c2224433139c5b992","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"6f583dab214e70e60a12f2588d70322c3f147ddd","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"dc97a1a1ae54ed16a4955f41b1bd50df14cc421a","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"511efb1141be95db7304539921953d604de777f9","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"ae642eb5d9e0c4f50da643ce0edd1fc27f42fb40","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":4}}},{"hash":"53f4c4fcf4e454c7fc28b96245cf56af7e2a3127","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":22}}},{"hash":"24886419f521b717f3ae24e52530ef8ebc4b2dfd","isMergeCommit":false,"messageTitle":"message","messageBody":"","tags":["Level-4","A-Inheritance","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":13}}}]},{"date":"2024-01-23","commitResults":[{"hash":"cd5f1e9a11c67d2c10ed8081b94728233de03ea1","isMergeCommit":false,"messageTitle":"testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"a894a9937d9143116278b89dbe26e3de74ff8633","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"6ca5ce2da16c02b8964bd25f6ebda6696dbe5cd4","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":107}}},{"hash":"896985b6389b044e4ceb9e319cd8cabf7ea3e6a9","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"7447ba30326c81537bd96fa1f2b13910ef12720f","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"073e6f6322d01a493cdee470458cc9937309e696","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"d42631012ff8094a94146ac0022ccea7766cb2fa","isMergeCommit":false,"messageTitle":"A-Exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"4943b1dc78fc9c10c99081a9e5bec9d2920adfa2","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":4}}},{"hash":"4f70ce18038c40b7da78ce6b93f0e0ef52204d73","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"fea78b9c32c32c3c24cd8cc61343e05babc769a2","isMergeCommit":false,"messageTitle":"A-Exceptions","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9377b56090b9975bae2942015edf504594c75f62","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":25}}},{"hash":"ba1fb56fd3128fab7605bba2b505a4998b7cf0c2","isMergeCommit":false,"messageTitle":"A-Collections","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":34}}},{"hash":"de60be8d13e41fe723a87cdbf1ce547ca95035eb","isMergeCommit":false,"messageTitle":"A-Enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":12}}}]},{"date":"2024-01-27","commitResults":[{"hash":"a59d7fcacea52916a5922635315313830fd98194","isMergeCommit":false,"messageTitle":"implement save to file when adding new task","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":95,"deletions":2}}},{"hash":"315716a74ed4d90f80752698499a9573d8d6742b","isMergeCommit":false,"messageTitle":"implement save for mark, unmark, and delete","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":4},"java":{"insertions":62,"deletions":20}}},{"hash":"adee5353b63f1fd9421efbd248e53c1adb2cbaf8","isMergeCommit":false,"messageTitle":"minor changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"adcedb0d97a1415b9cb4f2471cf3442d20418c0d","isMergeCommit":true,"messageTitle":"merge branch-Level-7 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"c6cc85dcf6e9dd764b2de656f428f00961981071","isMergeCommit":false,"messageTitle":"add LocalDate","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":12},"java":{"insertions":23,"deletions":11}}},{"hash":"0d64fd08084914f8a3d3d0ab4ba7402112e248d5","isMergeCommit":true,"messageTitle":"merge branch-Level-8 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"4485266bb8b74ce37fe152c7612557acedfeceba","isMergeCommit":false,"messageTitle":"add queryByTime feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":82,"deletions":23}}},{"hash":"f17fd204b8bb64a812b34def8dcc7fde53c18467","isMergeCommit":false,"messageTitle":"made structure more oop","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":574,"deletions":394}}},{"hash":"0e5cb8f0f20b17aa52c33dce45bc83bcc0aa92d5","isMergeCommit":false,"messageTitle":"separate code into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":12}}},{"hash":"fdbefc0f881e204f6f776ab2c477c6b990665fce","isMergeCommit":true,"messageTitle":"merge gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"4e1527498e40ebf891905a7c49a341dbbffd6c66","isMergeCommit":false,"messageTitle":"implement jUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":142,"deletions":1}}},{"hash":"c6f803904f22199a00f0a530d1a1cb606ebf3a77","isMergeCommit":false,"messageTitle":"create jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":1,"deletions":0}}},{"hash":"7e11927c1e892c82f47e39c49ed3a5ac0e6e0c2f","isMergeCommit":false,"messageTitle":"add javadocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":390,"deletions":27}}},{"hash":"e5a993a99616b0c27bf0a156d3a4ccfc7fd04bc5","isMergeCommit":false,"messageTitle":"fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":9}}},{"hash":"4149c76112548eb5a167fa158a6f514c5844131a","isMergeCommit":false,"messageTitle":"minor changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"7658d18ba781954796865e90ec7b3f7d887450ec","isMergeCommit":false,"messageTitle":"implement find feature","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":113,"deletions":18}}},{"hash":"f444957dab367c63705747612d8d216905925285","isMergeCommit":true,"messageTitle":"merge with branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"ce4ae59cc65d264881b29163939f315440a11dfd","isMergeCommit":true,"messageTitle":"merge with branch-A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"b2a9685208bcaad804a9e0ea649463c003addfe8","isMergeCommit":true,"messageTitle":"merge with branch-Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"dcac5f0fc991332b77337f30d315739d45aecf2e","isMergeCommit":false,"messageTitle":"minor change","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2024-01-30","commitResults":[{"hash":"640086dd3ef9dc486048d589e1071e367dc79023","isMergeCommit":false,"messageTitle":"move greeting and farewell to UI class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":18}}}]}]},"authorFileTypeContributionMap":{"alfaloo":{"java":1345,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":2,"txt":14}},"authorContributionVariance":{"alfaloo":333065.84},"authorDisplayNameMap":{"alfaloo":"CS2103T-T15-1 LU Z..YANG"}} diff --git a/appleraincoat_ip_master/authorship.json b/appleraincoat_ip_master/authorship.json index 4aa5b78a..0d1e80ad 100644 --- a/appleraincoat_ip_master/authorship.json +++ b/appleraincoat_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/Ypxmm.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"T | 0 | eat","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"D | 0 | level 9 hmwk | 03-02-2024 2359","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"E | 0 | bros dinner | 29-01-2024 1900 to 29-01-2024 2000","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"appleraincoat":3}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" protected LocalDateTime byWhen;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" public Deadline(String name, String byWhen) {","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" super(name);","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" this.byWhen \u003d parseTime(byWhen);","lastModifiedDate":"2024-01-29"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" private LocalDateTime parseTime(String timeString) {","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" return LocalDateTime.parse(timeString, formatter);","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byWhen.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" return \"D | \" + super.toWrite() + \" | \" + byWhen.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":25}},{"path":"src/main/java/EnumCommands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public enum EnumCommands {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":" LIST,","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" MARK,","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":" UNMARK,","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" TODO,","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" DEADLINE,","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" EVENT,","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" GETCOMMANDS,","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" DELETE,","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" BYE;","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"appleraincoat":11}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" protected LocalDateTime fromWhen;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" protected LocalDateTime toWhen;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" public Event(String name, String fromWhen, String toWhen) {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" super(name);","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" this.fromWhen \u003d parseTime(fromWhen);","lastModifiedDate":"2024-01-29"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" this.toWhen \u003d parseTime(toWhen);","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" private LocalDateTime parseTime(String timeString) {","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" return LocalDateTime.parse(timeString, formatter);","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromWhen.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"))","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" + \" to: \" + toWhen.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" return \"E | \" + super.toWrite() + \" | \" + fromWhen.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\")) +","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" \" to \" + toWhen.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":30}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":" protected String name;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" protected boolean completed;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" //constructor","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" public void markTask() {","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Upz la, mark for you already!\");","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" System.out.println(this.toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" public void setCompleted() {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d true;","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" public void unmarkTask() {","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Eh wake up your idea, faster finish can or not?? Unmark for you already la!\");","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" System.out.println(this.toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" return (completed ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-24"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" return (completed ? \"1\" : \"0\") + \" | \" + name;","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + name;","lastModifiedDate":"2024-01-24"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":40}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public class ToDo extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" public ToDo(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":" super(name);","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" return \"T | \" + super.toWrite();","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":16}},{"path":"src/main/java/Ypxmm.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"import java.util.Arrays;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-28"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"public class Ypxmm {","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" public static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003cTask\u003e(); //tasks","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" public static File f;","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" private static void printFileContents() throws FileNotFoundException {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" private static void writeToFile(String textToAdd) throws IOException, FileNotFoundException {","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" fw.write(textToAdd + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" private static void appendToFile(String textToAppend) throws IOException, FileNotFoundException {","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" FileWriter fw \u003d new FileWriter(f, true); // create a FileWriter in append mode","lastModifiedDate":"2024-01-29"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" fw.write(textToAppend + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" private static void reWrite() throws IOException, FileNotFoundException {","lastModifiedDate":"2024-01-29"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" FileWriter fw \u003d new FileWriter(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" for (Task t : tasks) {","lastModifiedDate":"2024-01-29"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" fw.write(t.toWrite() + \"\\n\");","lastModifiedDate":"2024-01-29"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" fw.close();","lastModifiedDate":"2024-01-29"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" private static void initToArray() throws FileNotFoundException {","lastModifiedDate":"2024-01-29"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2024-01-29"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-29"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" String[] line \u003d s.nextLine().split(\" \\\\| \");","lastModifiedDate":"2024-01-29"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":" if (line[0].equals(\"T\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new ToDo(line[2]);","lastModifiedDate":"2024-01-29"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" task.setCompleted();","lastModifiedDate":"2024-01-29"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":" } else if (line[0].equals(\"D\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new Deadline(line[2], line[3]);","lastModifiedDate":"2024-01-29"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":" task.setCompleted();","lastModifiedDate":"2024-01-29"},{"lineNumber":54,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":55,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":56,"author":{"gitId":"appleraincoat"},"content":" } else if (line[0].equals(\"E\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":57,"author":{"gitId":"appleraincoat"},"content":" String[] timing \u003d line[3].split(\" to \");","lastModifiedDate":"2024-01-29"},{"lineNumber":58,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new Event(line[2], timing[0], timing[1]);","lastModifiedDate":"2024-01-29"},{"lineNumber":59,"author":{"gitId":"appleraincoat"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2024-01-29"},{"lineNumber":60,"author":{"gitId":"appleraincoat"},"content":" task.setCompleted();","lastModifiedDate":"2024-01-29"},{"lineNumber":61,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":62,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-29"},{"lineNumber":63,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":64,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":65,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":66,"author":{"gitId":"appleraincoat"},"content":" public static void main(String[] args) throws YpxmmException {","lastModifiedDate":"2024-01-25"},{"lineNumber":67,"author":{"gitId":"appleraincoat"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-24"},{"lineNumber":68,"author":{"gitId":"appleraincoat"},"content":" sayHello();","lastModifiedDate":"2024-01-24"},{"lineNumber":69,"author":{"gitId":"appleraincoat"},"content":" boolean condition \u003d true;","lastModifiedDate":"2024-01-25"},{"lineNumber":70,"author":{"gitId":"appleraincoat"},"content":" f \u003d new File(\"data/Ypxmm.txt\");","lastModifiedDate":"2024-01-29"},{"lineNumber":71,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":72,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":73,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-29"},{"lineNumber":74,"author":{"gitId":"appleraincoat"},"content":" initToArray();","lastModifiedDate":"2024-01-29"},{"lineNumber":75,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":76,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":77,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":78,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-29"},{"lineNumber":79,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-29"},{"lineNumber":80,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":81,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":82,"author":{"gitId":"appleraincoat"},"content":" while (condition) {","lastModifiedDate":"2024-01-25"},{"lineNumber":83,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":84,"author":{"gitId":"appleraincoat"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2024-01-24"},{"lineNumber":85,"author":{"gitId":"appleraincoat"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2024-01-25"},{"lineNumber":86,"author":{"gitId":"appleraincoat"},"content":" EnumCommands enumc \u003d EnumCommands.valueOf(splitInput[0].toUpperCase());","lastModifiedDate":"2024-01-25"},{"lineNumber":87,"author":{"gitId":"appleraincoat"},"content":" switch (enumc) {","lastModifiedDate":"2024-01-25"},{"lineNumber":88,"author":{"gitId":"appleraincoat"},"content":" case BYE:","lastModifiedDate":"2024-01-25"},{"lineNumber":89,"author":{"gitId":"appleraincoat"},"content":" sayGoodbye();","lastModifiedDate":"2024-01-24"},{"lineNumber":90,"author":{"gitId":"appleraincoat"},"content":" condition \u003d false;","lastModifiedDate":"2024-01-25"},{"lineNumber":91,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-24"},{"lineNumber":92,"author":{"gitId":"appleraincoat"},"content":" case LIST:","lastModifiedDate":"2024-01-25"},{"lineNumber":93,"author":{"gitId":"appleraincoat"},"content":" list();","lastModifiedDate":"2024-01-24"},{"lineNumber":94,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":95,"author":{"gitId":"appleraincoat"},"content":" case MARK:","lastModifiedDate":"2024-01-25"},{"lineNumber":96,"author":{"gitId":"appleraincoat"},"content":" String[] valsMark \u003d input.split(\" \");","lastModifiedDate":"2024-01-25"},{"lineNumber":97,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":98,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(valsMark[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":99,"author":{"gitId":"appleraincoat"},"content":" mark(index);","lastModifiedDate":"2024-01-24"},{"lineNumber":100,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":101,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, key in mark \u003cspace\u003e then a valid number\");","lastModifiedDate":"2024-01-25"},{"lineNumber":102,"author":{"gitId":"appleraincoat"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2024-01-25"},{"lineNumber":103,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You tell me now what task am I supposed to mark if you don\u0027t provide me with a number?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":104,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":105,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":106,"author":{"gitId":"appleraincoat"},"content":" case UNMARK:","lastModifiedDate":"2024-01-25"},{"lineNumber":107,"author":{"gitId":"appleraincoat"},"content":" String[] valsUnmark \u003d input.split(\" \");","lastModifiedDate":"2024-01-25"},{"lineNumber":108,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":109,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(valsUnmark[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":110,"author":{"gitId":"appleraincoat"},"content":" unmark(index);","lastModifiedDate":"2024-01-24"},{"lineNumber":111,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":112,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, key in unmark \u003cspace\u003e then a valid number\");","lastModifiedDate":"2024-01-25"},{"lineNumber":113,"author":{"gitId":"appleraincoat"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2024-01-25"},{"lineNumber":114,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You tell me now what task am I supposed to unmark if you don\u0027t provide me with a number?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":115,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":116,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":117,"author":{"gitId":"appleraincoat"},"content":" case TODO:","lastModifiedDate":"2024-01-25"},{"lineNumber":118,"author":{"gitId":"appleraincoat"},"content":" addTask(input, \"todo\");","lastModifiedDate":"2024-01-24"},{"lineNumber":119,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":120,"author":{"gitId":"appleraincoat"},"content":" case DEADLINE:","lastModifiedDate":"2024-01-25"},{"lineNumber":121,"author":{"gitId":"appleraincoat"},"content":" addTask(input, \"deadline\");","lastModifiedDate":"2024-01-24"},{"lineNumber":122,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":123,"author":{"gitId":"appleraincoat"},"content":" case EVENT:","lastModifiedDate":"2024-01-25"},{"lineNumber":124,"author":{"gitId":"appleraincoat"},"content":" addTask(input, \"event\");","lastModifiedDate":"2024-01-24"},{"lineNumber":125,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":126,"author":{"gitId":"appleraincoat"},"content":" case GETCOMMANDS:","lastModifiedDate":"2024-01-25"},{"lineNumber":127,"author":{"gitId":"appleraincoat"},"content":" getCommands();","lastModifiedDate":"2024-01-25"},{"lineNumber":128,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":129,"author":{"gitId":"appleraincoat"},"content":" case DELETE:","lastModifiedDate":"2024-01-25"},{"lineNumber":130,"author":{"gitId":"appleraincoat"},"content":" String[] vals \u003d input.split(\" \");","lastModifiedDate":"2024-01-25"},{"lineNumber":131,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":132,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(vals[1]);","lastModifiedDate":"2024-01-25"},{"lineNumber":133,"author":{"gitId":"appleraincoat"},"content":" delete(index);","lastModifiedDate":"2024-01-25"},{"lineNumber":134,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":135,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, key in delete \u003cspace\u003e then a valid number\");","lastModifiedDate":"2024-01-25"},{"lineNumber":136,"author":{"gitId":"appleraincoat"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2024-01-25"},{"lineNumber":137,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You tell me now what task am I supposed to delete if you don\u0027t provide me with a number?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":138,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":139,"author":{"gitId":"appleraincoat"},"content":" break;","lastModifiedDate":"2024-01-25"},{"lineNumber":140,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":141,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":142,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":143,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":144,"author":{"gitId":"appleraincoat"},"content":" } catch (IllegalArgumentException i) {","lastModifiedDate":"2024-01-25"},{"lineNumber":145,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Sorry bro, idk what that means. You try type in \\\"getcommands\\\" then see if got what u want.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":146,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":147,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":148,"author":{"gitId":"appleraincoat"},"content":" sc.close();","lastModifiedDate":"2024-01-24"},{"lineNumber":149,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":150,"author":{"gitId":"appleraincoat"},"content":" public static void getCommands() {","lastModifiedDate":"2024-01-24"},{"lineNumber":151,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Take note ah, enter all time based commands are in \u003cdd-mm-yyyy HHmm\u003e format\\n\" +","lastModifiedDate":"2024-01-29"},{"lineNumber":152,"author":{"gitId":"appleraincoat"},"content":" \" todo \u003ctask\u003e - adds todo\\n deadline \u003ctask\u003e/\u003cby when\u003e - adds deadline\\n\" +","lastModifiedDate":"2024-01-29"},{"lineNumber":153,"author":{"gitId":"appleraincoat"},"content":" \" event \u003ctask\u003e/\u003cfrom when\u003e/\u003cto when\u003e - adds event\\n list - lists out all tasks\\n\" +","lastModifiedDate":"2024-01-25"},{"lineNumber":154,"author":{"gitId":"appleraincoat"},"content":" \" mark \u003cx\u003e - marks task x as done\\n unmark \u003cx\u003e - unmarks task x as undone\\n\" +","lastModifiedDate":"2024-01-25"},{"lineNumber":155,"author":{"gitId":"appleraincoat"},"content":" \" bye - exit\");","lastModifiedDate":"2024-01-24"},{"lineNumber":156,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":157,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":158,"author":{"gitId":"appleraincoat"},"content":" public static void sayHello() {","lastModifiedDate":"2024-01-24"},{"lineNumber":159,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Hello, I\u0027m Ypxmm.\\nNeed me do what for you?\");","lastModifiedDate":"2024-01-24"},{"lineNumber":160,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":161,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":162,"author":{"gitId":"appleraincoat"},"content":" public static void sayGoodbye() {","lastModifiedDate":"2024-01-24"},{"lineNumber":163,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Oh you need zao alr? Okok see you next time!\");","lastModifiedDate":"2024-01-24"},{"lineNumber":164,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":165,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":166,"author":{"gitId":"appleraincoat"},"content":" public static void list() {","lastModifiedDate":"2024-01-24"},{"lineNumber":167,"author":{"gitId":"appleraincoat"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2024-01-24"},{"lineNumber":168,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"No tasks yet la bro\");","lastModifiedDate":"2024-01-24"},{"lineNumber":169,"author":{"gitId":"appleraincoat"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":170,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok wait ah, here are your tasks:\");","lastModifiedDate":"2024-01-25"},{"lineNumber":171,"author":{"gitId":"appleraincoat"},"content":" int count \u003d 1;","lastModifiedDate":"2024-01-24"},{"lineNumber":172,"author":{"gitId":"appleraincoat"},"content":" for (Task t : tasks) {","lastModifiedDate":"2024-01-24"},{"lineNumber":173,"author":{"gitId":"appleraincoat"},"content":" System.out.println(count + \". \" + t.toString());","lastModifiedDate":"2024-01-24"},{"lineNumber":174,"author":{"gitId":"appleraincoat"},"content":" count++;","lastModifiedDate":"2024-01-24"},{"lineNumber":175,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":176,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":177,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":178,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":179,"author":{"gitId":"appleraincoat"},"content":" public static void mark(int index) {","lastModifiedDate":"2024-01-24"},{"lineNumber":180,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":181,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":182,"author":{"gitId":"appleraincoat"},"content":" tasks.get(index - 1).markTask();","lastModifiedDate":"2024-01-24"},{"lineNumber":183,"author":{"gitId":"appleraincoat"},"content":" reWrite();","lastModifiedDate":"2024-01-29"},{"lineNumber":184,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":185,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-25"},{"lineNumber":186,"author":{"gitId":"appleraincoat"},"content":" (tasks.size() \u003d\u003d 0 ? \"no tasks to mark.\" : tasks.size() +","lastModifiedDate":"2024-01-25"},{"lineNumber":187,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasks.size()));","lastModifiedDate":"2024-01-24"},{"lineNumber":188,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":189,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":190,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":191,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-29"},{"lineNumber":192,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":193,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":194,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":195,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":196,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":197,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":198,"author":{"gitId":"appleraincoat"},"content":" public static void unmark(int index) {","lastModifiedDate":"2024-01-24"},{"lineNumber":199,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":200,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-24"},{"lineNumber":201,"author":{"gitId":"appleraincoat"},"content":" tasks.get(index - 1).unmarkTask();","lastModifiedDate":"2024-01-24"},{"lineNumber":202,"author":{"gitId":"appleraincoat"},"content":" reWrite();","lastModifiedDate":"2024-01-29"},{"lineNumber":203,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-24"},{"lineNumber":204,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-25"},{"lineNumber":205,"author":{"gitId":"appleraincoat"},"content":" (tasks.size() \u003d\u003d 0 ? \"no tasks to unmark.\" : tasks.size() +","lastModifiedDate":"2024-01-25"},{"lineNumber":206,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasks.size()));","lastModifiedDate":"2024-01-24"},{"lineNumber":207,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":208,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":209,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":210,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-29"},{"lineNumber":211,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":212,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":213,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":214,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":215,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":216,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":217,"author":{"gitId":"appleraincoat"},"content":" public static void delete(int index) {","lastModifiedDate":"2024-01-25"},{"lineNumber":218,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":219,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":220,"author":{"gitId":"appleraincoat"},"content":" String t \u003d tasks.get(index - 1).toString();","lastModifiedDate":"2024-01-25"},{"lineNumber":221,"author":{"gitId":"appleraincoat"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2024-01-25"},{"lineNumber":222,"author":{"gitId":"appleraincoat"},"content":" reWrite();","lastModifiedDate":"2024-01-29"},{"lineNumber":223,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok deleted liao:\\n\" + t + \"\\nNow your list got \" +","lastModifiedDate":"2024-01-25"},{"lineNumber":224,"author":{"gitId":"appleraincoat"},"content":" (tasks.size() \u003d\u003d 0 ? \"no tasks.\" : tasks.size() + \" tasks left.\"));","lastModifiedDate":"2024-01-25"},{"lineNumber":225,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":226,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-25"},{"lineNumber":227,"author":{"gitId":"appleraincoat"},"content":" (tasks.size() \u003d\u003d 0 ? \"no tasks to delete.\" : tasks.size() +","lastModifiedDate":"2024-01-25"},{"lineNumber":228,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasks.size()));","lastModifiedDate":"2024-01-25"},{"lineNumber":229,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":230,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":231,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":232,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-29"},{"lineNumber":233,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":234,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":235,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":236,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":237,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":238,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":239,"author":{"gitId":"appleraincoat"},"content":" public static void addTask(String input, String type) {","lastModifiedDate":"2024-01-24"},{"lineNumber":240,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":241,"author":{"gitId":"appleraincoat"},"content":" if (type.equals(\"todo\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":242,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":243,"author":{"gitId":"appleraincoat"},"content":" String[] info \u003d input.split(\"todo \");","lastModifiedDate":"2024-01-25"},{"lineNumber":244,"author":{"gitId":"appleraincoat"},"content":" if (info[1].isBlank()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":245,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Help la, can just tell me what is the name of your task anot?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":246,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":247,"author":{"gitId":"appleraincoat"},"content":" Task t \u003d new ToDo(info[1].trim());","lastModifiedDate":"2024-01-29"},{"lineNumber":248,"author":{"gitId":"appleraincoat"},"content":" tasks.add(t);","lastModifiedDate":"2024-01-24"},{"lineNumber":249,"author":{"gitId":"appleraincoat"},"content":" appendToFile(t.toWrite());","lastModifiedDate":"2024-01-29"},{"lineNumber":250,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok I help you add this one liao:\\n\" + t.toString() +","lastModifiedDate":"2024-01-24"},{"lineNumber":251,"author":{"gitId":"appleraincoat"},"content":" \"\\nNow your list got \" + tasks.size() + ((tasks.size() \u003d\u003d 1) ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2024-01-24"},{"lineNumber":252,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":253,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You trying to test my patience ah? Type \\\"get commands\\\" if u blur and dunno how to use me properly.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":254,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":255,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":256,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":257,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-29"},{"lineNumber":258,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":259,"author":{"gitId":"appleraincoat"},"content":" } else if (type.equals(\"deadline\")) {","lastModifiedDate":"2024-01-24"},{"lineNumber":260,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":261,"author":{"gitId":"appleraincoat"},"content":" String[] info \u003d input.split(\"/\");","lastModifiedDate":"2024-01-25"},{"lineNumber":262,"author":{"gitId":"appleraincoat"},"content":" if (info[0].split(\"deadline \")[1].isBlank() || info[1].isBlank()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":263,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Help la, can just tell me what is the name of your task anot?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":264,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":265,"author":{"gitId":"appleraincoat"},"content":" Task t \u003d new Deadline(info[0].substring(9).trim(), info[1].trim());","lastModifiedDate":"2024-01-29"},{"lineNumber":266,"author":{"gitId":"appleraincoat"},"content":" tasks.add(t);","lastModifiedDate":"2024-01-24"},{"lineNumber":267,"author":{"gitId":"appleraincoat"},"content":" appendToFile(t.toWrite());","lastModifiedDate":"2024-01-29"},{"lineNumber":268,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok I help you add this one liao:\\n\" + t.toString() +","lastModifiedDate":"2024-01-24"},{"lineNumber":269,"author":{"gitId":"appleraincoat"},"content":" \"\\nNow your list got \" + tasks.size() + ((tasks.size() \u003d\u003d 1) ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2024-01-24"},{"lineNumber":270,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":271,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You trying to test my patience ah? Check that u got key in the deadline lehhh\\n\" +","lastModifiedDate":"2024-01-25"},{"lineNumber":272,"author":{"gitId":"appleraincoat"},"content":" \"Type \\\"get commands\\\" if u blur and dunno how to use me properly.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":273,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":274,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":275,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":276,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-29"},{"lineNumber":277,"author":{"gitId":"appleraincoat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":278,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, follow format can or not? Enter dates in dd-mm-yyyy HHmm (24-08-2024 1800)\");","lastModifiedDate":"2024-01-29"},{"lineNumber":279,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":280,"author":{"gitId":"appleraincoat"},"content":" } else {","lastModifiedDate":"2024-01-24"},{"lineNumber":281,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":282,"author":{"gitId":"appleraincoat"},"content":" String[] info \u003d input.split(\"/\");","lastModifiedDate":"2024-01-25"},{"lineNumber":283,"author":{"gitId":"appleraincoat"},"content":" if (info[0].split(\"event \")[1].isBlank() || info[1].isBlank() || info[2].isBlank()) {","lastModifiedDate":"2024-01-25"},{"lineNumber":284,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Help la, can just tell me what is the name of your task anot?\");","lastModifiedDate":"2024-01-25"},{"lineNumber":285,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":286,"author":{"gitId":"appleraincoat"},"content":" Task t \u003d new Event(info[0].substring(6).trim(), info[1].trim(), info[2].trim());","lastModifiedDate":"2024-01-29"},{"lineNumber":287,"author":{"gitId":"appleraincoat"},"content":" tasks.add(t);","lastModifiedDate":"2024-01-24"},{"lineNumber":288,"author":{"gitId":"appleraincoat"},"content":" appendToFile(t.toWrite());","lastModifiedDate":"2024-01-29"},{"lineNumber":289,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok I help you add this one liao:\\n\" + t.toString() +","lastModifiedDate":"2024-01-24"},{"lineNumber":290,"author":{"gitId":"appleraincoat"},"content":" \"\\nNow your list got \" + tasks.size() + ((tasks.size() \u003d\u003d 1) ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2024-01-24"},{"lineNumber":291,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-25"},{"lineNumber":292,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh brother last warning ah. Check that u got key in the start and end time\\n\" +","lastModifiedDate":"2024-01-25"},{"lineNumber":293,"author":{"gitId":"appleraincoat"},"content":" \"Type \\\"get commands\\\" if u blur and dunno how to use me properly.\");","lastModifiedDate":"2024-01-25"},{"lineNumber":294,"author":{"gitId":"appleraincoat"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":295,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"File not created yet la bro. In the ip folder, create a new folder \\\"data\\\" and a new txt file \\\"Ypxmm\\\" to proceed\");","lastModifiedDate":"2024-01-29"},{"lineNumber":296,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":297,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-29"},{"lineNumber":298,"author":{"gitId":"appleraincoat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-29"},{"lineNumber":299,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, follow format can or not? Enter dates in dd-mm-yyyy HHmm (24-08-2024 1800)\");","lastModifiedDate":"2024-01-29"},{"lineNumber":300,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":301,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":302,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":303,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":304,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":305,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":306,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":306}},{"path":"src/main/java/YpxmmException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public class YpxmmException extends Exception {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":" public YpxmmException(String message) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" super(message);","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"appleraincoat":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"list","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"mark 1","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"mark t","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"unmark 1","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"unmark y","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"todo","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"todo eat","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"deadline homework /","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":"deadline homework /5pm","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"event dinner /5pm /","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"event dinner /5pm /6pm","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":"mark 1","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":"delete 4","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":"delete y","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":"delete 2","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":"list","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"zzz","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":"getcommands","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"java -classpath ..\\bin Ypxmm \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"appleraincoat":1}}] +[{"path":"data/Ypxmm.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"T | 0 | eat","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"D | 0 | level 9 hmwk | 03-02-2024 2359","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"E | 0 | bros dinner | 29-01-2024 1900 to 29-01-2024 2000","lastModifiedDate":"2024-01-29"}],"authorContributionMap":{"appleraincoat":3}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public enum Command {","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" LIST {","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" ui.printList(tasklist.tasks);","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" MARK {","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(parsed.get(1));","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d tasklist.tasks.get(index - 1);","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" task.markTask();","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" storage.reWrite(tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" ui.markMessage(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" (tasklist.tasks.isEmpty() ? \"no tasks to mark.\" : tasklist.tasks.size() +","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasklist.tasks.size()));","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" UNMARK {","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(parsed.get(1));","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d tasklist.tasks.get(index - 1);","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" task.unmarkTask();","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" storage.reWrite(tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" ui.unmarkMessage(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" (tasklist.tasks.isEmpty() ? \"no tasks to unmark.\" : tasklist.tasks.size() +","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasklist.tasks.size()));","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" TODO {","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) {","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new ToDo(parsed.get(1));","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" tasklist.addTask(parsed, task);","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":" storage.appendToFile(task.toWrite());","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"appleraincoat"},"content":" ui.addTaskMessage(task, tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"appleraincoat"},"content":" DEADLINE {","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) {","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new Deadline(parsed.get(1).trim(), parsed.get(2).trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"appleraincoat"},"content":" tasklist.addTask(parsed, task);","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"appleraincoat"},"content":" storage.appendToFile(task.toWrite());","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"appleraincoat"},"content":" ui.addTaskMessage(task, tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"appleraincoat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Brother, follow format can or not? Enter dates in dd-mm-yyyy HHmm (24-08-2024 1800)\");","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"appleraincoat"},"content":" EVENT {","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) {","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new Event(parsed.get(1).trim(), parsed.get(2).trim(), parsed.get(3).trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"appleraincoat"},"content":" tasklist.addTask(parsed, task);","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"appleraincoat"},"content":" storage.appendToFile(task.toWrite());","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"appleraincoat"},"content":" ui.addTaskMessage(task, tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"appleraincoat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Brother, follow format can or not? Enter dates in dd-mm-yyyy HHmm (24-08-2024 1800)\");","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"appleraincoat"},"content":" GETCOMMANDS {","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) {","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"appleraincoat"},"content":" ui.getCommands();","lastModifiedDate":"2024-01-30"},{"lineNumber":94,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":95,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":96,"author":{"gitId":"appleraincoat"},"content":" DELETE {","lastModifiedDate":"2024-01-30"},{"lineNumber":97,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":98,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":99,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(parsed.get(1));","lastModifiedDate":"2024-01-30"},{"lineNumber":100,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":101,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d tasklist.tasks.get(index - 1);","lastModifiedDate":"2024-01-30"},{"lineNumber":102,"author":{"gitId":"appleraincoat"},"content":" tasklist.deleteTask(index);","lastModifiedDate":"2024-01-30"},{"lineNumber":103,"author":{"gitId":"appleraincoat"},"content":" storage.reWrite(tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":104,"author":{"gitId":"appleraincoat"},"content":" ui.deleteTaskMessage(task, tasklist);","lastModifiedDate":"2024-01-30"},{"lineNumber":105,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":106,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-30"},{"lineNumber":107,"author":{"gitId":"appleraincoat"},"content":" (tasklist.tasks.isEmpty() ? \"no tasks to delete.\" : tasklist.tasks.size() +","lastModifiedDate":"2024-01-30"},{"lineNumber":108,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasklist.tasks.size()));","lastModifiedDate":"2024-01-30"},{"lineNumber":109,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":110,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":111,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":112,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":113,"author":{"gitId":"appleraincoat"},"content":" },","lastModifiedDate":"2024-01-30"},{"lineNumber":114,"author":{"gitId":"appleraincoat"},"content":" BYE {","lastModifiedDate":"2024-01-30"},{"lineNumber":115,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-30"},{"lineNumber":116,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasklist, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) {","lastModifiedDate":"2024-01-30"},{"lineNumber":117,"author":{"gitId":"appleraincoat"},"content":" ui.sayGoodbye();","lastModifiedDate":"2024-01-30"},{"lineNumber":118,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":119,"author":{"gitId":"appleraincoat"},"content":" };","lastModifiedDate":"2024-01-30"},{"lineNumber":120,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":121,"author":{"gitId":"appleraincoat"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage, ArrayList\u003cString\u003e parsed) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":122,"author":{"gitId":"appleraincoat"},"content":" //should never reach here as all invalid inputs will be handled","lastModifiedDate":"2024-01-30"},{"lineNumber":123,"author":{"gitId":"appleraincoat"},"content":" //in parse method in Parser class","lastModifiedDate":"2024-01-30"},{"lineNumber":124,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":125,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"appleraincoat":125}},{"path":"src/main/java/DateTimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public class DateTimeParser {","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" protected DateTimeFormatter formatter;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" public DateTimeParser() {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" public LocalDateTime parseDateTime(String timeString) {","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" return LocalDateTime.parse(timeString, this.formatter);","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"appleraincoat":13}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public class Deadline extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" protected LocalDateTime byWhen;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" protected DateTimeParser dateTimeParser;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" public Deadline(String name, String byWhenString) {","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" super(name);","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" this.dateTimeParser \u003d new DateTimeParser();","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" this.byWhen \u003d this.dateTimeParser.parseDateTime(byWhenString);","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byWhen.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" return \"D | \" + super.toWrite() + \" | \" + byWhen.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":23}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public class Event extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" protected LocalDateTime fromWhen;","lastModifiedDate":"2024-01-29"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" protected LocalDateTime toWhen;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" protected DateTimeParser dateTimeParser;","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" public Event(String name, String fromWhenString, String toWhenString) {","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" super(name);","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" this.dateTimeParser \u003d new DateTimeParser();","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" this.fromWhen \u003d this.dateTimeParser.parseDateTime(fromWhenString);","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" this.toWhen \u003d this.dateTimeParser.parseDateTime(toWhenString);","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromWhen.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"))","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" + \" to: \" + toWhen.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\")) + \")\";","lastModifiedDate":"2024-01-29"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" return \"E | \" + super.toWrite() + \" | \" + fromWhen.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\")) +","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" \" to \" + toWhen.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2024-01-29"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":27}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"public class Parser {","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" public static ArrayList\u003cString\u003e parse(String input) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" ArrayList\u003cString\u003e parsedResult \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" String command \u003d splitInput[0];","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" switch (command) {","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" case \"bye\", \"list\", \"getcommands\":","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" case \"mark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(splitInput[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(splitInput[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, key in mark \u003cspace\u003e then a valid number\");","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You tell me now what task am I supposed to mark if you don\u0027t provide me with a number?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" case \"unmark\":","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(splitInput[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(splitInput[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, key in unmark \u003cspace\u003e then a valid number\");","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You tell me now what task am I supposed to unmark if you don\u0027t provide me with a number?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" case \"todo\":","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" String[] info \u003d input.split(\"todo \");","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" if (info[1].isBlank()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Help la, can just tell me what is the name of your task anot?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(info[1].trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You trying to test my patience ah? Type \\\"get commands\\\" if u blur and dunno how to use me properly.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" case \"deadline\":","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" String[] info \u003d input.split(\"/\");","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":" if (info[0].split(\"deadline \")[1].isBlank() || info[1].isBlank()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Help la, can just tell me what is the name of your task anot?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(info[0].substring(9).trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(info[1].trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You trying to test my patience ah? Check that u got key in the deadline lehhh\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"appleraincoat"},"content":" \"Type \\\"get commands\\\" if u blur and dunno how to use me properly.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"appleraincoat"},"content":" case \"event\":","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"appleraincoat"},"content":" String[] info \u003d input.split(\"/\");","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"appleraincoat"},"content":" if (info[0].split(\"event \")[1].isBlank() || info[1].isBlank() || info[2].isBlank()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Help la, can just tell me what is the name of your task anot?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(info[0].substring(6).trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(info[1].trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(info[2].trim());","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh brother last warning ah. Check that u got key in the start and end time\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"appleraincoat"},"content":" \"Type \\\"get commands\\\" if u blur and dunno how to use me properly.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"appleraincoat"},"content":" case \"delete\":","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":80,"author":{"gitId":"appleraincoat"},"content":" int index \u003d Integer.parseInt(splitInput[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":81,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(command);","lastModifiedDate":"2024-01-30"},{"lineNumber":82,"author":{"gitId":"appleraincoat"},"content":" parsedResult.add(splitInput[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":83,"author":{"gitId":"appleraincoat"},"content":" return parsedResult;","lastModifiedDate":"2024-01-30"},{"lineNumber":84,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":85,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, key in delete \u003cspace\u003e then a valid number\");","lastModifiedDate":"2024-01-30"},{"lineNumber":86,"author":{"gitId":"appleraincoat"},"content":" } catch (NumberFormatException n) {","lastModifiedDate":"2024-01-30"},{"lineNumber":87,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"You tell me now what task am I supposed to delete if you don\u0027t provide me with a number?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":88,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":89,"author":{"gitId":"appleraincoat"},"content":" default:","lastModifiedDate":"2024-01-30"},{"lineNumber":90,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Sorry bro, idk what that means. You try type in \\\"getcommands\\\" then see if got what u want.\");","lastModifiedDate":"2024-01-30"},{"lineNumber":91,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":92,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":93,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"appleraincoat":93}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.io.File;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"public class Storage {","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" public String filePath;","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" public Storage(String filePath) {","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" public void appendToFile(String textToAppend) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" FileWriter fw \u003d new FileWriter(file, true); // create a FileWriter in append mode","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" fw.write(textToAppend + \"\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" fw.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" public void reWrite(TaskList tasklist) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" for (Task t : tasklist.tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":" fw.write(t.toWrite() + \"\\n\");","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" fw.close();","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" public ArrayList\u003cTask\u003e load() throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" if (!file.exists()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":" file.createNewFile();","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" Scanner s \u003d new Scanner(file);","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":" while (s.hasNext()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" String[] line \u003d s.nextLine().split(\" \\\\| \");","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":" if (line[0].equals(\"T\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new ToDo(line[2]);","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":" task.setCompleted();","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"appleraincoat"},"content":" } else if (line[0].equals(\"D\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new Deadline(line[2], line[3]);","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"appleraincoat"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"appleraincoat"},"content":" task.setCompleted();","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"appleraincoat"},"content":" } else if (line[0].equals(\"E\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"appleraincoat"},"content":" String[] timing \u003d line[3].split(\" to \");","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"appleraincoat"},"content":" Task task \u003d new Event(line[2], timing[0], timing[1]);","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"appleraincoat"},"content":" if (line[1].equals(\"1\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"appleraincoat"},"content":" task.setCompleted();","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":70,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":71,"author":{"gitId":"appleraincoat"},"content":" } catch (IOException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":72,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"IOException\");","lastModifiedDate":"2024-01-30"},{"lineNumber":73,"author":{"gitId":"appleraincoat"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":74,"author":{"gitId":"appleraincoat"},"content":" file.delete();","lastModifiedDate":"2024-01-30"},{"lineNumber":75,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Wah bro your file is corrupted leh...I help you delete first\");","lastModifiedDate":"2024-01-30"},{"lineNumber":76,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":77,"author":{"gitId":"appleraincoat"},"content":" return tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":78,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":79,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"appleraincoat":79}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public class Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":" protected String name;","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" protected boolean completed;","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" //constructor","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" public Task(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" this.name \u003d name;","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" public void markTask() {","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d true;","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" public void setCompleted() {","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d true;","lastModifiedDate":"2024-01-29"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" public void unmarkTask() {","lastModifiedDate":"2024-01-24"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" this.completed \u003d false;","lastModifiedDate":"2024-01-24"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" public String getStatusIcon() {","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" return (completed ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" return (completed ? \"1\" : \"0\") + \" | \" + name;","lastModifiedDate":"2024-01-29"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + name;","lastModifiedDate":"2024-01-24"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":36}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"public class TaskList {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" public ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" public void addTask(ArrayList\u003cString\u003e input, Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" if (input.get(0).equals(\"todo\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" } else if (input.get(0).equals(\"deadline\")) {","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" try{","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, follow format can or not? Enter dates in dd-mm-yyyy HHmm (24-08-2024 1800)\");","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" tasks.add(task);","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Brother, follow format can or not? Enter dates in dd-mm-yyyy HHmm (24-08-2024 1800)\");","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" String t \u003d tasks.get(index - 1).toString();","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" throw new YpxmmException(\"Eh u seh isit? Now your list got \" +","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" (tasks.isEmpty() ? \"no tasks to delete.\" : tasks.size() +","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":" \" tasks, enter any number from 1 to \" + tasks.size()));","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"appleraincoat":54}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public class ToDo extends Task {","lastModifiedDate":"2024-01-24"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" public ToDo(String name) {","lastModifiedDate":"2024-01-24"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":" super(name);","lastModifiedDate":"2024-01-24"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-24"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" public String toString() {","lastModifiedDate":"2024-01-24"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2024-01-24"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-29"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" @Override","lastModifiedDate":"2024-01-29"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" public String toWrite() {","lastModifiedDate":"2024-01-29"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" return \"T | \" + super.toWrite();","lastModifiedDate":"2024-01-29"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-29"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":16}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-30"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-30"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"public class Ui {","lastModifiedDate":"2024-01-30"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":" private Scanner sc;","lastModifiedDate":"2024-01-30"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":" public Ui() {","lastModifiedDate":"2024-01-30"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2024-01-30"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" public void sayHello() {","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Hello, I\u0027m Ypxmm.\\nNeed me do what for you?\");","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" public String readCommand() {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" return sc.nextLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" public void showLine() {","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"-----------------------------------\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" \"---------------------------\");","lastModifiedDate":"2024-01-30"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":" public void getCommands() {","lastModifiedDate":"2024-01-30"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Take note ah, enter all time based commands are in \u003cdd-mm-yyyy HHmm\u003e format\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" \" todo \u003ctask\u003e - adds todo\\n deadline \u003ctask\u003e/\u003cby when\u003e - adds deadline\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" \" event \u003ctask\u003e/\u003cfrom when\u003e/\u003cto when\u003e - adds event\\n list - lists out all tasks\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" \" mark \u003cx\u003e - marks task x as done\\n unmark \u003cx\u003e - unmarks task x as undone\\n\" +","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" \" bye - exit\");","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" public void printList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"No tasks yet la bro\");","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" } else {","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok wait ah, here are your tasks:\");","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":" int count \u003d 1;","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" for (Task t : tasks) {","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" System.out.println(count + \". \" + t.toString());","lastModifiedDate":"2024-01-30"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" count++;","lastModifiedDate":"2024-01-30"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" public void addTaskMessage(Task task, TaskList tasklist) {","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok I help you add this one liao:\\n\" + task.toString() +","lastModifiedDate":"2024-01-30"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":" \"\\nNow your list got \" + tasklist.tasks.size() + ((tasklist.tasks.size() \u003d\u003d 1) ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2024-01-30"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" public void deleteTaskMessage(Task task, TaskList tasklist) {","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Ok deleted liao:\\n\" + task.toString() + \"\\nNow your list got \" +","lastModifiedDate":"2024-01-30"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":" (tasklist.tasks.isEmpty() ? \"no tasks.\" : tasklist.tasks.size() + \" tasks left.\"));","lastModifiedDate":"2024-01-30"},{"lineNumber":54,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":55,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":56,"author":{"gitId":"appleraincoat"},"content":" public void markMessage(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":57,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Upz la, mark for you already!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":58,"author":{"gitId":"appleraincoat"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-30"},{"lineNumber":59,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":60,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":61,"author":{"gitId":"appleraincoat"},"content":" public void unmarkMessage(Task task) {","lastModifiedDate":"2024-01-30"},{"lineNumber":62,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Eh wake up your idea, faster finish can or not?? Unmark for you already la!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":63,"author":{"gitId":"appleraincoat"},"content":" System.out.println(task.toString());","lastModifiedDate":"2024-01-30"},{"lineNumber":64,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":65,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-30"},{"lineNumber":66,"author":{"gitId":"appleraincoat"},"content":" public void sayGoodbye() {","lastModifiedDate":"2024-01-30"},{"lineNumber":67,"author":{"gitId":"appleraincoat"},"content":" System.out.println(\"Oh you need zao alr? Okok see you next time!\");","lastModifiedDate":"2024-01-30"},{"lineNumber":68,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-30"},{"lineNumber":69,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-30"}],"authorContributionMap":{"appleraincoat":69}},{"path":"src/main/java/Ypxmm.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"import java.io.IOException;","lastModifiedDate":"2024-01-29"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2024-01-29"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"import java.util.ArrayList;","lastModifiedDate":"2024-01-28"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"import java.util.Arrays;","lastModifiedDate":"2024-01-29"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"import java.util.Scanner;","lastModifiedDate":"2024-01-28"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"import java.io.File;","lastModifiedDate":"2024-01-29"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2024-01-29"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"import java.io.FileWriter;","lastModifiedDate":"2024-01-29"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-28"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"public class Ypxmm {","lastModifiedDate":"2024-01-24"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":" private Storage storage;","lastModifiedDate":"2024-01-30"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":" private TaskList tasks;","lastModifiedDate":"2024-01-30"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":" private Ui ui;","lastModifiedDate":"2024-01-30"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":" public Ypxmm(String filePath) {","lastModifiedDate":"2024-01-30"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":" ui \u003d new Ui();","lastModifiedDate":"2024-01-30"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2024-01-30"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2024-01-30"},{"lineNumber":21,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":22,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":23,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":24,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":25,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":26,"author":{"gitId":"appleraincoat"},"content":" public void run() {","lastModifiedDate":"2024-01-30"},{"lineNumber":27,"author":{"gitId":"appleraincoat"},"content":" ui.sayHello();","lastModifiedDate":"2024-01-30"},{"lineNumber":28,"author":{"gitId":"appleraincoat"},"content":" ui.showLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":29,"author":{"gitId":"appleraincoat"},"content":" boolean isRunning \u003d true;","lastModifiedDate":"2024-01-30"},{"lineNumber":30,"author":{"gitId":"appleraincoat"},"content":" while (isRunning) {","lastModifiedDate":"2024-01-30"},{"lineNumber":31,"author":{"gitId":"appleraincoat"},"content":" String input \u003d ui.readCommand();","lastModifiedDate":"2024-01-30"},{"lineNumber":32,"author":{"gitId":"appleraincoat"},"content":" ui.showLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":33,"author":{"gitId":"appleraincoat"},"content":" try {","lastModifiedDate":"2024-01-25"},{"lineNumber":34,"author":{"gitId":"appleraincoat"},"content":" ArrayList\u003cString\u003e parsed \u003d Parser.parse(input);","lastModifiedDate":"2024-01-30"},{"lineNumber":35,"author":{"gitId":"appleraincoat"},"content":" Command command \u003d Command.valueOf(parsed.get(0).toUpperCase());","lastModifiedDate":"2024-01-30"},{"lineNumber":36,"author":{"gitId":"appleraincoat"},"content":" command.execute(tasks, ui, storage, parsed);","lastModifiedDate":"2024-01-30"},{"lineNumber":37,"author":{"gitId":"appleraincoat"},"content":" ui.showLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":38,"author":{"gitId":"appleraincoat"},"content":" if (command.equals(Command.BYE)) {","lastModifiedDate":"2024-01-30"},{"lineNumber":39,"author":{"gitId":"appleraincoat"},"content":" isRunning \u003d false;","lastModifiedDate":"2024-01-30"},{"lineNumber":40,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":41,"author":{"gitId":"appleraincoat"},"content":" } catch (YpxmmException y) {","lastModifiedDate":"2024-01-25"},{"lineNumber":42,"author":{"gitId":"appleraincoat"},"content":" System.out.println(y.getMessage());","lastModifiedDate":"2024-01-25"},{"lineNumber":43,"author":{"gitId":"appleraincoat"},"content":" ui.showLine();","lastModifiedDate":"2024-01-30"},{"lineNumber":44,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":45,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":46,"author":{"gitId":"appleraincoat"},"content":" ui.sayGoodbye();","lastModifiedDate":"2024-01-30"},{"lineNumber":47,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":48,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-25"},{"lineNumber":49,"author":{"gitId":"appleraincoat"},"content":" public static void main(String[] args) throws YpxmmException {","lastModifiedDate":"2024-01-30"},{"lineNumber":50,"author":{"gitId":"appleraincoat"},"content":"","lastModifiedDate":"2024-01-24"},{"lineNumber":51,"author":{"gitId":"appleraincoat"},"content":" new Ypxmm(\"/data/Ypxmm.txt\").run();","lastModifiedDate":"2024-01-30"},{"lineNumber":52,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-24"},{"lineNumber":53,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":53}},{"path":"src/main/java/YpxmmException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"public class YpxmmException extends Exception {","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":" public YpxmmException(String message) {","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":" super(message);","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":" }","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"}","lastModifiedDate":"2024-01-25"}],"authorContributionMap":{"appleraincoat":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"appleraincoat"},"content":"list","lastModifiedDate":"2024-01-25"},{"lineNumber":2,"author":{"gitId":"appleraincoat"},"content":"mark 1","lastModifiedDate":"2024-01-25"},{"lineNumber":3,"author":{"gitId":"appleraincoat"},"content":"mark t","lastModifiedDate":"2024-01-25"},{"lineNumber":4,"author":{"gitId":"appleraincoat"},"content":"unmark 1","lastModifiedDate":"2024-01-25"},{"lineNumber":5,"author":{"gitId":"appleraincoat"},"content":"unmark y","lastModifiedDate":"2024-01-25"},{"lineNumber":6,"author":{"gitId":"appleraincoat"},"content":"todo","lastModifiedDate":"2024-01-25"},{"lineNumber":7,"author":{"gitId":"appleraincoat"},"content":"todo eat","lastModifiedDate":"2024-01-25"},{"lineNumber":8,"author":{"gitId":"appleraincoat"},"content":"deadline homework /","lastModifiedDate":"2024-01-25"},{"lineNumber":9,"author":{"gitId":"appleraincoat"},"content":"deadline homework /5pm","lastModifiedDate":"2024-01-25"},{"lineNumber":10,"author":{"gitId":"appleraincoat"},"content":"event dinner /5pm /","lastModifiedDate":"2024-01-25"},{"lineNumber":11,"author":{"gitId":"appleraincoat"},"content":"event dinner /5pm /6pm","lastModifiedDate":"2024-01-25"},{"lineNumber":12,"author":{"gitId":"appleraincoat"},"content":"list","lastModifiedDate":"2024-01-24"},{"lineNumber":13,"author":{"gitId":"appleraincoat"},"content":"mark 1","lastModifiedDate":"2024-01-25"},{"lineNumber":14,"author":{"gitId":"appleraincoat"},"content":"delete 4","lastModifiedDate":"2024-01-25"},{"lineNumber":15,"author":{"gitId":"appleraincoat"},"content":"delete y","lastModifiedDate":"2024-01-25"},{"lineNumber":16,"author":{"gitId":"appleraincoat"},"content":"delete 2","lastModifiedDate":"2024-01-25"},{"lineNumber":17,"author":{"gitId":"appleraincoat"},"content":"list","lastModifiedDate":"2024-01-25"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"zzz","lastModifiedDate":"2024-01-25"},{"lineNumber":19,"author":{"gitId":"appleraincoat"},"content":"getcommands","lastModifiedDate":"2024-01-25"},{"lineNumber":20,"author":{"gitId":"appleraincoat"},"content":"bye","lastModifiedDate":"2024-01-24"}],"authorContributionMap":{"appleraincoat":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"appleraincoat"},"content":"java -classpath ..\\bin Ypxmm \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2024-01-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":20,"appleraincoat":1}}] diff --git a/appleraincoat_ip_master/commits.json b/appleraincoat_ip_master/commits.json index c1aba36b..619b6e03 100644 --- a/appleraincoat_ip_master/commits.json +++ b/appleraincoat_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"appleraincoat":[{"date":"2024-01-24","commitResults":[{"hash":"7b7c9116e31eba52d9b99a5d02a58d814721c0c8","isMergeCommit":false,"messageTitle":"Added chatbot Ypxmm, with only simple greetings before exiting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":10}}},{"hash":"301514198e0c45709c3a0c0605cc68736cfe9a52","isMergeCommit":false,"messageTitle":"Added the ability to echo messages, exiting on input \"bye\".","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"853403d4e6436a88595bd004a0b59df5368745f3","isMergeCommit":false,"messageTitle":"Removed ability to echo, keeps a lsit of inputs now and prints it upon request.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"5dd07de207755da3675ca3431bdd21e5f3991562","isMergeCommit":false,"messageTitle":"Abstracted a Task class.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"c4997f86cf293bbd2785a509ac8307df94419def","isMergeCommit":false,"messageTitle":"Add and extend 3 types of Tasks, Deadline, Event and Todo. Add static methods into main class to abstract out further.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":14}}},{"hash":"436fb0c4dffc3ce39b71dee8293dfdaf30bb874a","isMergeCommit":false,"messageTitle":"Add some simple test cases for semi-automated testing.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":1,"deletions":2},"bat":{"insertions":1,"deletions":1}}},{"hash":"6ad583d035115ea7ad5613caab675016719ad026","isMergeCommit":false,"messageTitle":"Add handling of invalid input for mark and unmark methods.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2024-01-25","commitResults":[{"hash":"7d8af053ce1e8b334bbc9bd36e92f117a7edc7e2","isMergeCommit":false,"messageTitle":"Add YpxmmException class. Able to handle invalid inputs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":51}}},{"hash":"239f76baef9cc0af555d8e14e659ec00ab6b0cc3","isMergeCommit":false,"messageTitle":"Add more exception handling features.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"1fd8acb5402a648f6f1849d1af0da08bdd54eaea","isMergeCommit":false,"messageTitle":"Add test cases for error handling.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":5}}},{"hash":"70fc418c2ef05d445951aed3fa80864ceec8f362","isMergeCommit":false,"messageTitle":"Add delete function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"157f0c497ff797f3677dcdcedcecc7ca486f634f","isMergeCommit":false,"messageTitle":"Add new test cases.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"6ce2e148e446a0e26ad3b1d270901785e93a8771","isMergeCommit":false,"messageTitle":"Add Enum class for commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"cba57607a4f94db49337525247091a41b9928bd0","isMergeCommit":false,"messageTitle":"Add enums, and change implementation to use them in a switch statement. Add 1 more catch for illegal argument exception. Add more test cases.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":6},"java":{"insertions":69,"deletions":66}}}]},{"date":"2024-01-28","commitResults":[{"hash":"596f5dbf5cc2ff9cfebd6f92bdafe43c8f4e8498","isMergeCommit":false,"messageTitle":"Change import statements in Ypxmm.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2024-01-29","commitResults":[{"hash":"a78bfed5020264c8c93afeeb140b0feaacbe091b","isMergeCommit":false,"messageTitle":"Add ability to save tasks to a file in hard disk, and load from it when initialise.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":123,"deletions":0}}},{"hash":"21b1149b18864ffaa994040823b99e181075d9cf","isMergeCommit":false,"messageTitle":"Add trimming when initialising tasks.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"825f1e9fdff8aa9339dcda229ec93abd8dd05941","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"cbc1fbc38e2bdd263da2e125d9edd292669ef698","isMergeCommit":false,"messageTitle":"Change byWhen variable in Deadline class to store in LocalDateTime format.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":10,"deletions":3}}},{"hash":"1e0213e96c828563208d7c718aaaf1aea725a9b7","isMergeCommit":false,"messageTitle":"Change Deadline and Event class to store timing with LocalDateTime type, adjust formatting to be consistent.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":23,"deletions":14}}},{"hash":"4c28cb3b0c0016d7ded86aa94edd82eee20db2b3","isMergeCommit":false,"messageTitle":"Modify getcommands command to suit the change in format","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":4}}},{"hash":"696d08e5824f83ae3967559379f4f0b2b65dd9fa","isMergeCommit":false,"messageTitle":"Add a catch for DateTimeParseException if the user inputs in the wrong format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"49255cd0b1928bd41d91a3a17b5d9b8268ddf06d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"appleraincoat":{"java":433,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":23}},"authorContributionVariance":{"appleraincoat":17804.977},"authorDisplayNameMap":{"appleraincoat":"CS2103T-W10-1 LAU ..AMES"}} +{"authorDailyContributionsMap":{"appleraincoat":[{"date":"2024-01-24","commitResults":[{"hash":"7b7c9116e31eba52d9b99a5d02a58d814721c0c8","isMergeCommit":false,"messageTitle":"Added chatbot Ypxmm, with only simple greetings before exiting","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":10}}},{"hash":"301514198e0c45709c3a0c0605cc68736cfe9a52","isMergeCommit":false,"messageTitle":"Added the ability to echo messages, exiting on input \"bye\".","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"853403d4e6436a88595bd004a0b59df5368745f3","isMergeCommit":false,"messageTitle":"Removed ability to echo, keeps a lsit of inputs now and prints it upon request.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"5dd07de207755da3675ca3431bdd21e5f3991562","isMergeCommit":false,"messageTitle":"Abstracted a Task class.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"c4997f86cf293bbd2785a509ac8307df94419def","isMergeCommit":false,"messageTitle":"Add and extend 3 types of Tasks, Deadline, Event and Todo. Add static methods into main class to abstract out further.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":14}}},{"hash":"436fb0c4dffc3ce39b71dee8293dfdaf30bb874a","isMergeCommit":false,"messageTitle":"Add some simple test cases for semi-automated testing.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":1,"deletions":2},"bat":{"insertions":1,"deletions":1}}},{"hash":"6ad583d035115ea7ad5613caab675016719ad026","isMergeCommit":false,"messageTitle":"Add handling of invalid input for mark and unmark methods.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2024-01-25","commitResults":[{"hash":"7d8af053ce1e8b334bbc9bd36e92f117a7edc7e2","isMergeCommit":false,"messageTitle":"Add YpxmmException class. Able to handle invalid inputs.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":51}}},{"hash":"239f76baef9cc0af555d8e14e659ec00ab6b0cc3","isMergeCommit":false,"messageTitle":"Add more exception handling features.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":5}}},{"hash":"1fd8acb5402a648f6f1849d1af0da08bdd54eaea","isMergeCommit":false,"messageTitle":"Add test cases for error handling.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":5}}},{"hash":"70fc418c2ef05d445951aed3fa80864ceec8f362","isMergeCommit":false,"messageTitle":"Add delete function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"157f0c497ff797f3677dcdcedcecc7ca486f634f","isMergeCommit":false,"messageTitle":"Add new test cases.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"6ce2e148e446a0e26ad3b1d270901785e93a8771","isMergeCommit":false,"messageTitle":"Add Enum class for commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"cba57607a4f94db49337525247091a41b9928bd0","isMergeCommit":false,"messageTitle":"Add enums, and change implementation to use them in a switch statement. Add 1 more catch for illegal argument exception. Add more test cases.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":6},"java":{"insertions":69,"deletions":66}}}]},{"date":"2024-01-28","commitResults":[{"hash":"596f5dbf5cc2ff9cfebd6f92bdafe43c8f4e8498","isMergeCommit":false,"messageTitle":"Change import statements in Ypxmm.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":1}}}]},{"date":"2024-01-29","commitResults":[{"hash":"a78bfed5020264c8c93afeeb140b0feaacbe091b","isMergeCommit":false,"messageTitle":"Add ability to save tasks to a file in hard disk, and load from it when initialise.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":123,"deletions":0}}},{"hash":"21b1149b18864ffaa994040823b99e181075d9cf","isMergeCommit":false,"messageTitle":"Add trimming when initialising tasks.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"825f1e9fdff8aa9339dcda229ec93abd8dd05941","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"cbc1fbc38e2bdd263da2e125d9edd292669ef698","isMergeCommit":false,"messageTitle":"Change byWhen variable in Deadline class to store in LocalDateTime format.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":4},"java":{"insertions":10,"deletions":3}}},{"hash":"1e0213e96c828563208d7c718aaaf1aea725a9b7","isMergeCommit":false,"messageTitle":"Change Deadline and Event class to store timing with LocalDateTime type, adjust formatting to be consistent.","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":4},"java":{"insertions":23,"deletions":14}}},{"hash":"4c28cb3b0c0016d7ded86aa94edd82eee20db2b3","isMergeCommit":false,"messageTitle":"Modify getcommands command to suit the change in format","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":4}}},{"hash":"696d08e5824f83ae3967559379f4f0b2b65dd9fa","isMergeCommit":false,"messageTitle":"Add a catch for DateTimeParseException if the user inputs in the wrong format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"49255cd0b1928bd41d91a3a17b5d9b8268ddf06d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2024-01-30","commitResults":[{"hash":"7ea8744afe39a8887d405e7c2e3d17fe286c6781","isMergeCommit":false,"messageTitle":"Refactor code. Rename EnumCommands to Command, add Parser, Storage, Ui, TaskList classes.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":441,"deletions":289}}},{"hash":"4ee5530812003ce55649fa4d20019a6d651e7f7b","isMergeCommit":false,"messageTitle":"Small bug fixes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":6}}},{"hash":"854391b613101ec18d8e3f404a58deda59eb8c34","isMergeCommit":false,"messageTitle":"Add DateTImeParser class that parses format of time in Deadline and Event classes. Add other small modifications to UI output.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":15}}},{"hash":"4237fc396670b957ee9a2b206d9af9f1c6011ed4","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"appleraincoat":{"java":593,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":23}},"authorContributionVariance":{"appleraincoat":53907.5},"authorDisplayNameMap":{"appleraincoat":"CS2103T-W10-1 LAU ..AMES"}} diff --git a/archive.zip b/archive.zip index 5b8afaceb63f4a8149bf5781eaa3b33c088f8026..681cb3cfea184f1008ecf94d9047b667220883d7 100644 GIT binary patch delta 356834 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 z≈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쿵n>et)j>C(Eylksmmt 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 `}S{)@4OjEFo;3<@R*Hw7}yWnujt`Ck{ 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 X+mHQ|O;{Ol4jdPZ<^Jw_dNmbN(s+bp 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

_azgjd2ZB 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 JBXtg``ZG;tH$+H$xA# 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°6NVUPkKc~E-G9hbqHDYLX)2y};^ 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�yL8qp1kF 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

%TQ9r;=a|NerHu!@IO&6QK}Um=#f?ZHE5X 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

cM+Bqj9 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 delta 302688 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